مشق Strings کی مشقیں

ایک ویب پیج میں سے تمام روابط اخذ کرنے کے لیے ایک فنکشن۔
PHP:
def fd(page):
  a=[]
  while True:
    stlink=page.find("href=")
    if stlink==-1:
        break
    tmp=page[stlink+6:]
    edlink=tmp.find("\"")
    link=tmp[:edlink]
    page=tmp[edlink:]
    a.append(link)
  return a


PHP:
>>> p=''' The Python Software Foundation is a non-profit corporation.
    <a href="http://www.python.org/psf/donations/">Please donate.</a>
    <br />    Last updated on Oct 11, 2012.  <a href="../bugs.html">Found a bug</a>?  <br />    Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7.'''
 
>>> d=fd(p)
>>> d
['http://www.python.org/psf/donations/', '../bugs.html', 'http://sphinx.pocoo.org/']
>>>

نمرہ لگتا ہے نہ صرف غور سے پڑھ رہی ہیں بلکہ کوڈ لکھ کر واضح بھی کر رہی ہیں۔

اوپر چار لائنوں پر مشتمل جو کوڈ ایک لنک اخذ کرنے کے لیے لکھا تھا اسے ہی ایک فنکشن کی صورت میں لکھ رہا ہوں جس کے بعد ایک اور فنکشن میں اسے کال کرکے تمام لنک کسی بھی ویب ایڈریس سے کشید کیے جا سکتے ہیں۔

PHP:
def get_next_target(page):
    start_link = page.find('<a href=')      # start of link tag
    if start_link == -1:                    # if  link tage not found then return None and 0
        return None,0
    start_quote = page.find('"',start_link)  # index of first quote in link tag
    end_quote = page.find('"',start_quote+1) # index of second quote in link tag
    url = page[start_quote+1:end_quote]      # extracting string between start quote and end quote
 
    return url, end_quote                    # returing URL and the index of ending quote of link string

ایک اور فنکشن جس میں کسی بھی ویب پیج سے تمام لنک اخذ کرنے کے لیے ایک لوپ چلائیں گے اور اوپر دیئے گئے فنکشن کو کال کرکے ایک ایک کرکے ویب لنک حاصل کرتے جائیں گے اور انہیں پرنٹ کریں گے۔

PHP:
def print_all_links(page):
    while True:
        url, endpos = get_next_target(page)
        if url:
            print (url)
            page = page[endpos:]
        else:
            break

اوپر دیئے گئے دونوں فنکشن کا استعمال کرتے ہوئے کسی بھی ہوم پیج سے لنک حاصل کرنے کا مختصر کوڈ

PHP:
import urllib
 
response = urllib.request.urlopen('http://www.urduweb.org/')
page = str(response.read())
 
print_all_links(page)
 
پورا کوڈ جس میں دونوں فنکشن شامل ہوں ایسے ہوگا۔

PHP:
import urllib.request
 
def get_next_target(page):
start_link = page.find('<a href=') # start of link tag
if start_link == -1: # if link tage not found then return None and 0
return None,0
start_quote = page.find('"',start_link) # index of first quote in link tag
end_quote = page.find('"',start_quote+1) # index of second quote in link tag
url = page[start_quote+1:end_quote] # extracting string between start quote and end quote
 
return url, end_quote # returing URL and the index of ending quote of link string
 
def print_all_links(page):
while True:
url, endpos = get_next_target(page) # calling function to get link and end position of lin i.e. second quote(")
if url: # if url has some value(not empty hence true)
print (url) # then print url and
page = page[endpos:] # reassign page starting from the end of the found url and rest of the remaining page string
else:
break
 
# opening a given url using URLLIB module
response = urllib.request.urlopen('http://www.urduweb.org/')
 
# reading the file handle and converting it into a string using str() function
page = str(response.read())
 
# calling print_all_links function to further call get_next_target function and print all links in a page
print_all_links(page)
اوپر والے کوڈ کو چلانے سے مندرجہ ذیل نتیجہ ظاہر ہوگا یعنی اردو ویب کے ہوم پیج کے تمام لنک پرنٹ ہو جائیں گے۔

HTML:
http://www.urduweb.org/
http://www.urduweb.org/
http://www.urduweb.org/blog/
http://www.urduweb.org/planet/
http://www.urduweb.org/mehfil/
http://www.urduweb.org/downloads/
http://wordpress.org/
 
تو پھر مجھے بھی سیکھنا ہے۔
جس طرح محمدصابر نے بتایا کہ پائتھون پر بالکل بنیاد سے دھاگے شروع کیے گئے ہیں اور کسی بھی قسم کا سوال ہو تو اس کا جواب دیا جائے گا بشرطیکہ کوئی سیکھنے میں سنجیدہ ہو۔

ویسے اگر میرا ٹیگ دیکھا ہو تو میں نے دو لوگوں کو خصوصی ٹیگ کیا تھا

محمد بلال اعظم
حسیب نذیر گِل
 
جس طرح محمدصابر نے بتایا کہ پائتھون پر بالکل بنیاد سے دھاگے شروع کیے گئے ہیں اور کسی بھی قسم کا سوال ہو تو اس کا جواب دیا جائے گا بشرطیکہ کوئی سیکھنے میں سنجیدہ ہو۔

ویسے اگر میرا ٹیگ دیکھا ہو تو میں نے دو لوگوں کو خصوصی ٹیگ کیا تھا

محمد بلال اعظم
حسیب نذیر گِل
بہت شکریہ۔میں پہلے بھی آیا تھا اس دھاگے پر لیکن کیا کروں ابھی کوئی روٹین نہیں بن پارہی
آج میں ڈیٹا بیس والے دھاگے پر جارہا ہوں وہاں سر کھپانے کا رادہ ہے
 
PHP:
def get_next_target(page):
    start_link = page.find('<a href=')      # start of link tag
    if start_link == -1:                    # if  link tage not found then return None and 0
        return None,0
    start_quote = page.find('"',start_link)  # index of first quote in link tag
    end_quote = page.find('"',start_quote+1) # index of second quote in link tag
    url = page[start_quote+1:end_quote]      # extracting string between start quote and end quote
 
    return url, end_quote                    # returing URL and the index of ending quote of link string

اتفاق سے اس کوڈ میں کچھ مسائل ہیں جن کو بہتر کیاجا سکتا ہے۔ اول تو یہ کہ لنک ٹیگ کی ابتدا بالکل ویسی ہو جیسا آپ نے مان لیا ہے، یہ ضروری نہیں۔ اینگل بریکٹ کے فوراً بعد a تو آئے گا لیکن اس کے فوراً بعد ایک اسپیس کے ساتھ href ایٹریبیوٹ ہی آئے یہ بالکل بھی ضروری نہیں۔ اس کی جگہ class, id, style, title یا کوئی بھی دوسرا ایٹریبیوٹ وہاں آ سکتا ہے۔ href بھی کہیں نہ کہیں ضرور ہوگا لیکن اینکر ٹیگ کے ایٹریبیوٹس میں اس کی ترتیب کچھ بھی ہو سکتی ہے۔ دوسرا مسئلہ یہ ہے کہ ہائپر ریفرینس (href) کی قدر کو "ڈبل کوٹس" میں تصور کیا گیا ہے۔ گو کہ یہ بیسٹ پریکٹس ہے لیکن کئی دفعہ لوگ اس کو سنگل کوٹس میں بھی رکھتے ہیں (کئی دفعہ بغیر کوٹس کے بھی اس کو لکھ دیا جائے تو کچھ براؤزر اسے درست انٹرپریٹ کر لیتے ہیں لیکن اس طرح لکھنا غلط ہے اس لیے اس صورت کو ترک کیا جا سکتا ہے)۔ اس کے بر عکس نمرہ بٹیا رانی کے ابتدائی کوڈ کا یہ مسئلہ تھا کہ انھوں نے صرف href پر تکیہ کیا تھا جب کہ یہ ایٹریبیوٹ اینکر ٹیگ کے علاوہ بھی استعمال ہوتا ہے مثلاً link ٹیگ میں جو کہ اسٹائل شیٹ، آر ایس ایس فیڈ اور ایسے ہی دیگر وسائل کو مربوط کرنے کے لیے استعمال ہوتے ہیں اور صفحے پر نظر نہیں آتے۔ خیر اس کو درست طریقے سے حاصل کرنے کے لیے ریگیولر ایکسپریشن استعمال کیا جا سکتا ہے یا پھر دوسرے اسٹرنگ آپریشنز۔ :) :) :)

خیر یہ تو ہوا نصف قصہ جو اسٹرنگ کی ایکسرسائز تک ٹھیک ہے لیکن اس کوڈ کو یوٹیلٹی بنانے کے لیے ابھی مزید کام کرنا ہوگا۔ اور وہ ہے مکمل روابط کا حصول۔ کیوں کہ اکثر ہائپر ریفرینس کی قدر مکمل یو آر ایل کی شکل میں نہیں ہوتی جو اسے پورٹیبل بناتی ہے۔ اس کی ویلیو موجودہ صفحے کے یو آر ایل کے تحت کسی ریلیوٹیو پاتھ یا ایبسولیوٹ پاتھ کے ساتھ ہو سکتی ہے یا پھر ڈومین نیم اور پروٹوکول کے ساتھ ایبسولیوٹ یو آر ایل۔ کئی دفعہ تو صرف پروٹوکول ہٹا دیا جاتا ہے تاکہ ایچ ٹی ٹی پی اور ایچ ٹی ٹی پی ایس دونوں پر یکساں کام کرے۔ اس کے علاوہ اگر صفحے میں کوئی base ٹیگ موجود ہے تو بجائے صفحے کے یو آر ایل کے، تمام ریلیوٹیو اور ایبسولیوٹ پاتھ base ٹیگ کے href قدر کے حوالے سے کیلکیولیٹ کیے جاتے ہیں۔ :) :) :)
 

محمدصابر

محفلین
اتفاق سے اس کوڈ میں کچھ مسائل ہیں جن کو بہتر کیاجا سکتا ہے۔ اول تو یہ کہ لنک ٹیگ کی ابتدا بالکل ویسی ہو جیسا آپ نے مان لیا ہے، یہ ضروری نہیں۔ اینگل بریکٹ کے فوراً بعد a تو آئے گا لیکن اس کے فوراً بعد ایک اسپیس کے ساتھ href ایٹریبیوٹ ہی آئے یہ بالکل بھی ضروری نہیں۔ اس کی جگہ class, id, style, title یا کوئی بھی دوسرا ایٹریبیوٹ وہاں آ سکتا ہے۔ href بھی کہیں نہ کہیں ضرور ہوگا لیکن اینکر ٹیگ کے ایٹریبیوٹس میں اس کی ترتیب کچھ بھی ہو سکتی ہے۔ دوسرا مسئلہ یہ ہے کہ ہائپر ریفرینس (href) کی قدر کو "ڈبل کوٹس" میں تصور کیا گیا ہے۔ گو کہ یہ بیسٹ پریکٹس ہے لیکن کئی دفعہ لوگ اس کو سنگل کوٹس میں بھی رکھتے ہیں (کئی دفعہ بغیر کوٹس کے بھی اس کو لکھ دیا جائے تو کچھ براؤزر اسے درست انٹرپریٹ کر لیتے ہیں لیکن اس طرح لکھنا غلط ہے اس لیے اس صورت کو ترک کیا جا سکتا ہے)۔ اس کے بر عکس نمرہ بٹیا رانی کے ابتدائی کوڈ کا یہ مسئلہ تھا کہ انھوں نے صرف href پر تکیہ کیا تھا جب کہ یہ ایٹریبیوٹ اینکر ٹیگ کے علاوہ بھی استعمال ہوتا ہے مثلاً link ٹیگ میں جو کہ اسٹائل شیٹ، آر ایس ایس فیڈ اور ایسے ہی دیگر وسائل کو مربوط کرنے کے لیے استعمال ہوتے ہیں اور صفحے پر نظر نہیں آتے۔ خیر اس کو درست طریقے سے حاصل کرنے کے لیے ریگیولر ایکسپریشن استعمال کیا جا سکتا ہے یا پھر دوسرے اسٹرنگ آپریشنز۔ :) :) :)

خیر یہ تو ہوا نصف قصہ جو اسٹرنگ کی ایکسرسائز تک ٹھیک ہے لیکن اس کوڈ کو یوٹیلٹی بنانے کے لیے ابھی مزید کام کرنا ہوگا۔ اور وہ ہے مکمل روابط کا حصول۔ کیوں کہ اکثر ہائپر ریفرینس کی قدر مکمل یو آر ایل کی شکل میں نہیں ہوتی جو اسے پورٹیبل بناتی ہے۔ اس کی ویلیو موجودہ صفحے کے یو آر ایل کے تحت کسی ریلیوٹیو پاتھ یا ایبسولیوٹ پاتھ کے ساتھ ہو سکتی ہے یا پھر ڈومین نیم اور پروٹوکول کے ساتھ ایبسولیوٹ یو آر ایل۔ کئی دفعہ تو صرف پروٹوکول ہٹا دیا جاتا ہے تاکہ ایچ ٹی ٹی پی اور ایچ ٹی ٹی پی ایس دونوں پر یکساں کام کرے۔ اس کے علاوہ اگر صفحے میں کوئی base ٹیگ موجود ہے تو بجائے صفحے کے یو آر ایل کے، تمام ریلیوٹیو اور ایبسولیوٹ پاتھ base ٹیگ کے href قدر کے حوالے سے کیلکیولیٹ کیے جاتے ہیں۔ :) :) :)
آپ کا مطلب ہے کہ بندہ کوشش بھی نہ کرے۔ :) :) :)
 

محمدصابر

محفلین
اور آپ چاہتے ہیں کہ ہم تبصرے کرنا ترک کر دیں؟ :) :) :) :) :)

ایسا تو نہیں کہ ہم نے کسی کی کوشش کی پذیرائی نہیں کی لیکن what is next کا اسکوپ تو ہر چیز میں ہوتا ہے۔ :) :) :)
ویسے تبصرے تو آپ نے اپنی مرضی سے کرنے ہیں اتنے تو بالکل نہیں کرنے جتنے میں یا ہم چاہتے ہیں۔
وٹ از نیکسٹ کے لئے یہ اُوپر جو مراسلہ ہے محب علوی کے لئے تو ہو سکتا ہے۔ محمد صابر یا محمد احمد کے لئے نہیں۔ :) :)
 
ویسے تبصرے تو آپ نے اپنی مرضی سے کرنے ہیں اتنے تو بالکل نہیں کرنے جتنے میں یا ہم چاہتے ہیں۔
وٹ از نیکسٹ کے لئے یہ اُوپر جو مراسلہ ہے محب علوی کے لئے تو ہو سکتا ہے۔ محمد صابر یا محمد احمد کے لئے نہیں۔ :) :)
در اصل ہم اپنی بات کو مثالوں سے واضح کرتے تو مراسلہ کافی طویل ہو جاتا اس لیے شاید کچھ باتیں اجنبی لگی ہوں گی۔ لیکن فکر نہ کریں، ٹیکسٹ پارسنگ میں کارنر کیسیز تو ہوتے ہی ہیں۔ :) :) :)
 

محمد بلال اعظم

لائبریرین
جس طرح محمدصابر نے بتایا کہ پائتھون پر بالکل بنیاد سے دھاگے شروع کیے گئے ہیں اور کسی بھی قسم کا سوال ہو تو اس کا جواب دیا جائے گا بشرطیکہ کوئی سیکھنے میں سنجیدہ ہو۔

ویسے اگر میرا ٹیگ دیکھا ہو تو میں نے دو لوگوں کو خصوصی ٹیگ کیا تھا

محمد بلال اعظم
حسیب نذیر گِل

اصل میں اُن دنوں میرے پیپرز چل رہے تھے تو زیادہ توجہ نہیں دے سکا۔ البتہ اب دوبارہ سے شروع کروں گا۔
 

محمدصابر

محفلین
در اصل ہم اپنی بات کو مثالوں سے واضح کرتے تو مراسلہ کافی طویل ہو جاتا اس لیے شاید کچھ باتیں اجنبی لگی ہوں گی۔ لیکن فکر نہ کریں، ٹیکسٹ پارسنگ میں کارنر کیسیز تو ہوتے ہی ہیں۔ :) :) :)
اسی طویل مراسلے کے لئے تو کوشش کر رہا ہوں۔ ویسے کوئی بات اجنبی نہیں لگی۔ :)
 
بہت شکریہ۔میں پہلے بھی آیا تھا اس دھاگے پر لیکن کیا کروں ابھی کوئی روٹین نہیں بن پارہی
آج میں ڈیٹا بیس والے دھاگے پر جارہا ہوں وہاں سر کھپانے کا رادہ ہے


روٹین تو بنانے سے بنے گی اور ابھی تو اتنا زیاد مواد نہیں کہ چند نشستوں میں پڑھا نہ جا سکے۔
 
اتفاق سے اس کوڈ میں کچھ مسائل ہیں جن کو بہتر کیاجا سکتا ہے۔ اول تو یہ کہ لنک ٹیگ کی ابتدا بالکل ویسی ہو جیسا آپ نے مان لیا ہے، یہ ضروری نہیں۔ اینگل بریکٹ کے فوراً بعد a تو آئے گا لیکن اس کے فوراً بعد ایک اسپیس کے ساتھ href ایٹریبیوٹ ہی آئے یہ بالکل بھی ضروری نہیں۔ اس کی جگہ class, id, style, title یا کوئی بھی دوسرا ایٹریبیوٹ وہاں آ سکتا ہے۔ href بھی کہیں نہ کہیں ضرور ہوگا لیکن اینکر ٹیگ کے ایٹریبیوٹس میں اس کی ترتیب کچھ بھی ہو سکتی ہے۔ دوسرا مسئلہ یہ ہے کہ ہائپر ریفرینس (href) کی قدر کو "ڈبل کوٹس" میں تصور کیا گیا ہے۔ گو کہ یہ بیسٹ پریکٹس ہے لیکن کئی دفعہ لوگ اس کو سنگل کوٹس میں بھی رکھتے ہیں (کئی دفعہ بغیر کوٹس کے بھی اس کو لکھ دیا جائے تو کچھ براؤزر اسے درست انٹرپریٹ کر لیتے ہیں لیکن اس طرح لکھنا غلط ہے اس لیے اس صورت کو ترک کیا جا سکتا ہے)۔ اس کے بر عکس نمرہ بٹیا رانی کے ابتدائی کوڈ کا یہ مسئلہ تھا کہ انھوں نے صرف href پر تکیہ کیا تھا جب کہ یہ ایٹریبیوٹ اینکر ٹیگ کے علاوہ بھی استعمال ہوتا ہے مثلاً link ٹیگ میں جو کہ اسٹائل شیٹ، آر ایس ایس فیڈ اور ایسے ہی دیگر وسائل کو مربوط کرنے کے لیے استعمال ہوتے ہیں اور صفحے پر نظر نہیں آتے۔ خیر اس کو درست طریقے سے حاصل کرنے کے لیے ریگیولر ایکسپریشن استعمال کیا جا سکتا ہے یا پھر دوسرے اسٹرنگ آپریشنز۔ :) :) :)

خیر یہ تو ہوا نصف قصہ جو اسٹرنگ کی ایکسرسائز تک ٹھیک ہے لیکن اس کوڈ کو یوٹیلٹی بنانے کے لیے ابھی مزید کام کرنا ہوگا۔ اور وہ ہے مکمل روابط کا حصول۔ کیوں کہ اکثر ہائپر ریفرینس کی قدر مکمل یو آر ایل کی شکل میں نہیں ہوتی جو اسے پورٹیبل بناتی ہے۔ اس کی ویلیو موجودہ صفحے کے یو آر ایل کے تحت کسی ریلیوٹیو پاتھ یا ایبسولیوٹ پاتھ کے ساتھ ہو سکتی ہے یا پھر ڈومین نیم اور پروٹوکول کے ساتھ ایبسولیوٹ یو آر ایل۔ کئی دفعہ تو صرف پروٹوکول ہٹا دیا جاتا ہے تاکہ ایچ ٹی ٹی پی اور ایچ ٹی ٹی پی ایس دونوں پر یکساں کام کرے۔ اس کے علاوہ اگر صفحے میں کوئی base ٹیگ موجود ہے تو بجائے صفحے کے یو آر ایل کے، تمام ریلیوٹیو اور ایبسولیوٹ پاتھ base ٹیگ کے href قدر کے حوالے سے کیلکیولیٹ کیے جاتے ہیں۔ :) :) :)

ابھی یہ بالکل ابتدائی صورت ہے اور اسٹرنگ کی مشقوں سے ہوتے ہوئے لنکس کو اخذ کرنے کے لیے کوڈ لکھا جا رہا ہے جو کہ صرف بنیادی ضرورت پوری کر رہا ہے۔ ابھی اسے ڈبل کوٹس میں مان کر لکھا جا رہا ہے جب یہ بہتر اور چند دوسرے کارآمد کام کرنے کے قابل ہو جائے گا تب اسے مزید بہتر کیا جائے گا جس میں error handling ، optimization جیسی چیزیں شامل ہوں گی۔

ابھی یہ کارآمد اطلاقیہ کے پاس پاس بھی نہیں ہے البتہ code readability کو فنکشن در فنکشن کال کے ذریعے واضح کیا جا رہا ہے۔ چھوٹے چھوٹے اضافوں کے ذریعے آگے بڑھا جا رہا ہے۔
 
Top