 اسلام علیکم cs-201, انٹورڈیکٹنآن پروگریم są� спрос پرچلے لیکٹر میں ہم نے آئی ب chooses ب matter ہی پس بای میں خواہِ اور ف ال ہنگ میں ہم نے اس فایلس کے بارے میں کشہ کی تEE السیمپل خیل شاہدمے ف Thirty اynı Lindsay sequence ڈیز ہم پہلے لکھیںگے Luego اس کے بعد لکھیں گے اس کے بعد لکھیں گے، رینڈملی نہیں لکھیں گے اور اسی طرح پڑھنے کے لئے کچھ چیزیں ہم پہلے پڑھیں گے پھر اس کے بعد والی چیزیں پڑھیں گے، پھر اس کے بعد والے کیریکٹرز یا بائٹز پڑھیں گے لیکن رینڈملی نہیں پڑھیں گے آج ہم ذرہ آپ نے فائلز کی دسکشن کی سکوپ کیا اس کو بڑھاتے ہیں اور اب ہم رینڈم ایکسس فائلز کے بارے میں بھی آج بات کریں گے کچھ جو فنچنز ہم نے استعمال کیے یا جو پروپٹیز ہیں فائلزٹریمز کی ان کی ہم نے بات کی ان کے ذرا ریکاب کرتے چلیں ہم نے دیکھا تھا کہ جی فائل کو کھولتے کیسے ہیں اس کے لئے ایک اپن فنچن ہوتا ہے اور پھر کلوز کرنے کے لئے کلوز فنچن ہوتا ہے these are all functions, therefore they have parentheses and they take arguments close of course does not take an argument اپن کے ساتھ ہم نے کہا تھا کہ جی فائل کو کھولا جاتا ہے تو وہ پڑھنے کیلئے بھی کھول سکتے ہیں اور لکھنے کیلئے بھی کھول سکتے ہیں اگر پڑھنے کیلئے کھولیں گے تو اگر تو وہ اس کی طیب ہے i f string input file stream تو پھر فائل کا نام بتا دینا ہی کافی ہے اس کا default open mode جو ہے وہ پڑھنے کیلئے ہے یعنی input کیلئے ہے ہاں اگر آپ چاہیں تو ایڈیشنال آگومنٹ دے دیں کہ جی open کے بعد فائل کا نام دیکھے comma ios colon colon in that means input کیلئے کھول رہے ہیں لیکن یہ لازمی نہیں ہے یہ default behavior ہے input file stream کا output file stream کے اندر ہواوہ we have several alternatives اگر ہم open کریں فائل کو for output تو ہم کہہ سکتے ہیں کہ جی اس کو اس طرح سے کھولیں کہ جی پہلے جو چیزیں مجھ میں لکھی ہیں وہ زائہ ہو جائیں that is the default mode so you have to be very careful کہ اگر output کیلئے آپ فائل کھولیں گے that means جو فائل میں پہلے چیزیں پڑی ہوئی تھی وہ فورن زائہ ہو جاتی ہیں on the other hand اگر آپ چاہیں کہ جی وہ زائہ نہ ہو اور آپ فائل جہاں تک لکھی گئے ہیں اس کے بعد میں آپ کو اس لکنا چاہیں تو اس کو append mode کی اندر کھولیں اس کے لئے qualifier جو آتا ہے وہ ios colon colon app short for append truncate جو ہے یہ ایک اور qualifier ہے trunc یہ default mode کے ساتھ ہے کہ فائل کھولی ہو اور اس کو truncate کر کے اس کی لنٹ کو zero کر دیا جائے اور پھر جو بھی لکھییں جو اس میں نئے سرے سے لکھا جائے گا اگر آپ فائل کو کھولنا چاہتے ہیں لکھنے کے لئے اور چاہتے ہیں کہ ایک position بھی ہو لیکن آپ آگے پیچھے جہاں مزی لکھتے ہیں تو اس کے لئے qualifier تھا at end which meant فائل کو کھولیں اور فائل کو position کریں at end اور پھر وہاں سے لکھنا شروع کر دیں ورنہ آگے پیچھے لکھ سکتے ہیں اس کے بارے میں بھی آج بات ہوگی open اور close کے علاوہ ہم نے بات کی تھی کہ جی اس کو لکھتے کیسے اور پڑھتے کیسے ہیں وہ جو function تھے ان کے لئے ہم نے ایک تو character by character کی بات کی تھی کہ اگر get کریں فائل سے تو ایک character پڑھا جاتا ہے اگر put کریں تو ایک character لکھا جاتا ہے character کو you should interpret it as a byte on the other end ہم نے دیکھا تھا کیونکہ یہ streams ہیں تو see in اور see out والا behavior بھی ان کے لئے valid ہے تو آپ stream extraction یا stream insertion operators یعنی وہ double less than sign یا double greater than sign بھی استعمال کر سکتے ہیں اس کو بھی ہم آگے چلیں گے اور کچھ اور جو ہے properties آپ کے لئے انتردیوز کریں گے آج پھر ایک function تھا get line جو کہ فائل میں سے پوری ایک ایک line ڈھاکے پر سکتے ہیں اس کے لئے آپ کو بتانا چاہتا ہے کہ جی کتنے characters پڑھنے ہیں اور پھر اس کا delimiter کیا ہوگا get line کے ساتھ آپ کو جو خیال رکھنا پڑھتا ہے وہ یہ ہے کہ جب آپ بتاتے ہیں کہ جیس میں سے 10 characters پڑھنے ہیں تو وہ actually know پڑھے گا because it is handling it like a string اگر وہ string پڑھ رہا ہے تو پھر وہ 10th character اپنی طرف سے backslash 0 یا nul characters کے اندر append کرے گا so you should experiment with this and see what happens کہ اگر آپ کہیں کہ جی get line کے ساتھ 10 characters پڑھو argument دے دیں تو وہ 10 پڑھتا ہے کہ 9 پڑھتا ہے determine it for yourself آج let's go and talk a little bit about file positions کیونکہ ہم نے random access files کی باتیں کرنے ہیں تو آگے پیچھے فائل کو کیسے کیا جاتا ہے پہلی چیز یہ ہے کہ جی جب ہم آگے پیچھے کی بات کر رہے ہیں اور بات کر رہے ہیں کہ جی فائل میں چیزیں کہی پہ بھی ہم لکھنا چاہتے ہیں تو there has to be a concept of کہ جی اس وقت ہم فائل میں کہاں ہیں so you have to understand that there is a concept of a file position a pointer into the file saying کہ جی اس وقت آپ پڑیں گے تو کہاں سے پڑھنا شروع ہوگا یاگر آپ لکھیں گے تو کہاں سے فائل میں لکھنا شروع ہوگا اس کے لیے یہ جو file position pointer ہے اس کو determine کرنے کے لیے یہ کہاں پہ ہے ہمار پاس دو function ہیں اس کو آپ احسان اور اچھا طریقہ جو ہے اس کو یاد رکھنے کا وہ یہ ہے کہ جب ہم فائل سے کچھ پڑھنا چاہتے ہیں تو we want to get something from a file اور اگر ہم لکھنا چاہتے ہیں تو we want to put something into a file یہ اس واستے میں stress کر رہا ہوں کہ یہ نام جو ہیں functions کے بڑے obvious ہیں اگر آپ کہیں ہمارے پاس لیت سے ایک file ہے جس کو ہم نے open کیا ہے with a stream called my file تو اگر آپ کہیں کہ جی my file.tel g t-e-l-l-g یہ کہہ رہا ہے کہ جی یہ بتاو کہ اس کی get position کنسی ہے جی is for get tell means بتاو so my file.tel g returns an integer a whole number normally it's a long because files can be very big it returns a whole number which tells you the position of the next character that would be read from the file یہ بھی خیال رکھیں next character so for example اگر آپ فائل کھولتے ہیں the next character will be read from position 0 default opening beginning میں position ہوگا اگر یہ reading کی لی آپ نے file کھولی ہے so tell g is a useful function اسی درہ اگر آپ فائل میں کچھ لکھ رہے ہیں اور آپ ڈیٹرمین کرنے چاہتے ہیں کہ جی next byte یا جو جو بھی آپ لکھنا چاہ رہے ہیں وہ کہاں پے لکھا جائے گا اس کے لیے function is tell p یہ function بھی long ہی return کرتا ہے اور بتاہتا ہے کہ جی وہ file میں کنسی position ہے جہاں پے next character لکھا جائے گا so tell g and tell p are very very useful function next thing we need to know is how to position ourselves into a file ابھی تو ہمیں یہ پتا چلا کہ جی اگر ہم نے پرنے کے لیے file کھولی ہے تو وہ beginning میں position ہوگی لکھنے کے لیے کھولے تو depend کرتا ہے کہ کس طرح کھولی ہے default behavior 0 length کی file ہوگی اور beginning میں file pointer جو ہے وہ پڑا ہوگا لیکن suppose کہ ہم چاہتے ہیں کہ جی ایک file کھولی جائے اور اس کا some character سے reading شروع کی جائے تو how do we do that اس کے لیے ہمارے پاس functions ہیں which are seek g and seek p تو seek g جو ہے وہ کہتا ہے کہ جی next character یا byte جو ہے وہ کہاں سے پرنی ہے seek get اس کو position کرنے کے لیے اس کو آپ کو ایک argument دینا پڑتا ہے long کسم کا یعنی کتنی bytes move کریں لیکن جب بھی move کی بات آتی ہے تو وہ relative move ہوتا ہے کہ جی کہاں سے move کرنا ہے شروع سے move کرنا ہے اخیر سے move کرنا ہے جہاں پہ آپ ہیں وہاں سے move کرنا ہے تو if you think of a file being this long and you are currently over here in the file آپ نے کچھ پرنی ہے چیزیں تو جب بھی آپ seek g function call کریں تو you have to tell it کہ جی شروع سے یہاں تک move کرو یا یہاں سے اتنی bytes آگے move کرو یا اخیر سے اتنی bytes پیچھے کو move کرو as a result جب میں پیچھے کی بات کی تو you will realize کہ seek کے ساتھ positive یا negative بتایا جا سکتا ہے کہ کدر کو move کرنا ہے positive moves forward in the file جہاں پہ بھی آپ ہیں یا جہاں سے بھی آپ indicate کرتے ہیں وہاں سے آپ آگے کو جاتے ہیں اور اگر آپ negative number دے دیں تو جہاں پہ بھی آپ ہیں یا جہاں سے بھی آپ بتاتے ہیں وہاں سے پیچھے کو file کے درموف کیا جاتا ہے اس کا proper syntax جو ہے وہ اس طرح کہ ہے کہ جی let's say seek g کو ہم لے لیتے ہیں seek get کو تو seek g کے بعد آپ ایک long number دیں گے long again because file can be so long and so large کہ جی integer کے ساتھ وہ value پوری نہیں آئے گی so آپ ایک long whole number دیتے ہیں اس کے بعد آپ بتاتے ہیں کہ یہ کہاں سے so آپ کہاں سے بتانے کے لیے ہمارے پاس تین option ہیں یا file کا شروع یا جہاں پہ آپ ہیں یا file کا end ان کے نام جو ہیں بالکل obvious ہیں یہ ios یا input output system کے اندر defined ہیں اور آپ کو بہتر ہے کہ جی آپ وہ definitionsی استعمال کریں so we will say something like seek g 10 یا 10 capital L which means 10 long comma اس کے بعد ہم لکھتے ہیں ios colon colon beg that means from beginning ios تو ios system ہو گیا اور اس کا یہ ایک member indicator ہے کہ جی ios colon colon beg beg means beginning سے اتنی bytes move کرو اگر ہم کہیں ios colon colon cur it means current position جو بھی ہے file میں وہ آپ tell g سے حاصل کر سکتے ہیں current position سے اتنی bytes move کرو اگر 10 L ہم نے کہا ہے تو 10 bytes 10 bytes آگے کو move ہوگا اگر آپ minus 10 L کر دیتے ہیں تو وہ پیچھے کو move ہوگا اور آخری چیز اگر آپ کہہ دیں ios colon colon end end so that means file کے end سے move کرو نواملی ہم file کے end سے پیچھے کو move کرتے ہیں کیونکہ آگے کو file نہیں ہوتی یہ بھی خیال رکھے کہ جب ہم file پڑھ رہے ہیں تو آپ file کی beginning سے پیچھے کو نہیں جا سکتے اور file کے end سے آگے کو نہیں جا سکتے you can also try this out at yourself program لکھیں file کے end پہ جائیں اور کہیں 10 bytes آگے جو اس کے بعد آپ پھر tell g function call کر کے دیکھیں کہ جی اب file position pointer کہاں پہ ہے اس سے آپ کو idea ہو جائے گا جی آپ move کیے ہیں کہ نہیں کیے various flags ہیں file handling کے لیے وہ بھی سیٹ ہو جاتے ہیں so you can play with these functions and find out what they tell you one of the useful things you can do with these functions is to find out کیجی file کی length کیا ہے لیکھیں strings کے لیے یاد ہوگا آپ کو ہم نے a string length function آپ کو بتایا تھا library میں آپ کو ساتھ ملتا ہے strln اور وہ return کرتا ہے کتنے caracters ہیں string کے اندر now string could have been in an array let's suppose کہ آپ کے array کی length 100 caracters تھی لیکن اس کے اندر آپ نے لکھ دیا welcome to virtual university تو welcome to virtual university جو ہے اس کے 100 caracters لنبہ نہیں ہے لہذا array کے اندر جو string پڑی ہوئی ہے وہ چھوٹی ہے اگر اس array کو string length function کو پاس کریں تو وہ بتایا گا کہ جی اندر جو اس کے string پڑی ہوئی ہے اس کی لنبہی کیا ہے یہی چیز فائلوں پہ بھی اپلایا کرتی ہے کہ file جو ہے وہ بزاتے خود لنبی ہو سکتی ہے لیکن اس کے اندر valid data جو ہے اس سے کم بھی ہو سکتا ہے کوئی وجہ آپ کو پتا ہے کیوں کم ہو سکتا ہے کم ہو سکتا ہے کیوں کہ پر ساکتا ہے کیوں کہ اس اپنے اپنے اباس سے خود اپ ہوں اور دیسک کیا آپ کو پہنچ پیر ہے کبھی اپنے اپنے اپنے اپنے اپنے اپنے ساکتا ہے جو دیسک میں مانشان کیا تھا کہ دیسک ہماری وہ اپنے مکینکل دیوائیسی ہیں ایک کامکینیکل دوائیسی ہیں. لہذا وہ جو ایک کامکینیکل دوائیسی ہیں۔ میکرو پراسر اور ریم بہت تیز ہیں۔ دسک ہے۔ جب دسک کو ہم لکنا یا پرنا چاہتے ہیں تو اگر اس کو کاریکٹر بای کاریکٹر لکھیں تو یہ کامکینیکل دوائیسی ہے۔ اسی طرح کاریکٹر بای کاریکٹر پرنا بھی جو ہے وہ بھی ویسٹ فل ہے۔ اسی کامکینیکل کو تھوڑا سا آگے بڑھائیں۔ اگر ہم کہیں کہ یہ ہم اس پر فائل لکھنا چاہتے ہیں اور فائل کی لینٹ ہے 53 بائٹس۔ تو کیا ہم 53 بائٹس کی فائل بنا دیں دسکے اوپر اور پھر next فائل جو لکھی جائے وہ 54th بائٹسے let's say disk position کے اندر وہاں سے شروع ہو۔ آنسر is that itself is wasteful and it's also a nightmare in terms of handling کہ یہ فائل کہاں سے شروع ہوئی کہاں ختم ہو گئی اور next فائل کہاں سے شروع ہو گئی کہاں ختم ہو گئی۔ as a result ہماری جو disks ہیں they are divided into logical blocks normally way 2 to the powers چل رہی ہوتی ہیں تو 64 is a power of 2 32 is a power of 2 128 is a power of 2 تو کوشش یہ ہوتی ہے کہ یہ disk جو ہے وہ ایک power of 2 کے blocks کے اندر divide کر دی جائے اور blocks کا size جو ہے that should be the minimum size that can be read or written to the disk ہماری فائل کے اندر آپ دیکھ لیں گے مطلب وہ پھر آ جاتے ہیں تھوڑے سے introduce computing والے concept آ جاتے ہیں کہ دس کی organization کیا ہے but typically آپ سمجھ لیں کہ جی whole chunks لکھے جاتے ہیں اب جب فائل کے لیے ہم نے disk کے اوپر جگے بنانی ہے تو ہم اس کے لیے 53 bytes کی جگے نہیں بناتے ہم ایک چنک بناتے ہیں اور وہ باقی جگے جو ہے جو فائل سے بڑی ہے obviously چھوٹی تو نہیں ہو سکتی otherwise you wouldn't be writing your data lose ہو جاتا ہے so normally فائل کا size جو ہے وہ دیتا ریٹن سے بڑا ہوتا ہے when it is sitting on disk so if you were to read that file وہ پورا کپورا چنک ہی پڑا جائے گا maybe it's 4k, maybe it's 8k, maybe it's 64k وہ چنک پڑکے لیکن اس کے اندہ جو دیتا ہے وہ اس سے کم ہو سکتا ہے یہ جو آپ کے functions ہیں tell g اور seek g یہ آپ کو بتا سکتے ہیں کہ جی فائل کی actual data length کتنی ہے اس کے لیے what would you do you would open the file and you would say seek g کر کے end پے چلے جاو کیسے جائیں گے؟ دیکھیں seek g کیا کرتا ہے اس کو آپ بتاتے ہیں کتنی bite move کرنی ہے اور کہا سے move کرنی ہے تو اگر میں seek g کو کہوں 0 bite move کرنی ہے اور اخیر سے move کرنا ہے تو what will happen is file pointer will go to the end of the file because it will move 0 bite from the end of the file and be positioned there so if you say seek g 0 comma ios colon colon end it will position a read only file or a file opened for reading at the end of the file اس کے بعد all you need to do is tell g call کریں تو آپ کو long number دے گا that will be the actual number of data bytes written in that file so seek g کر کے اخیر پہ چلے گے tell g بتاو کہاں پے ہو وہ بتا دے گا کہ کہاں پی آپ ہیں and that will be equivalent to the string length function for a string is the seek g and tell g combination that we can use with the file ابھی ہم یہ seek g tell g کی باتیں کر رہے ہیں اور جارہیں ہم random access files کی طرف تھوڑی سی justification ہونی چاہیے دی اس کو ہمیں استعمال کرنی کی ضرورت کیوں پیش آتی ہے؟ دیکھیں ہم نے ایک file لکھ دی let's سے اس کے اندر name اور addresses لکھ دی ہیں کوئی ایک student کا ہم نے data لکھ دی ہے name city he belongs to and let's سے date of birth تین چیزیں لکھ دیں simple file ہے اور کئی students کا بیچ میں data ہے درمیان میں ایک student ہے جو سکھر میں رہتا تھا سو ہم نے اس کا name لکھا پھر city کا name لکھا سکھر su kk ur اور پھر اس کی date of birth لکھ دی اور دو مہینوں کے بعد بات پتہ چلا کہ جی student move کر گیا ہے اب وہ راول پنڈی میں بیٹھا ہوا ہے اب data کو update کرنے کی ضرورت ہے اب وہ جو ہمار پس student data پڑا ہے اس میں کہیں درمیان میں جاکے اس student کا information یا record پڑا ہوا ہے اس کو کیسے update کریں سیک جی tell جی کر کے یا file کو پڑھ کے ہم سکھر کو دھونتو سکتے ہیں جب ہم نے دھون لیا کیا وہاں پہ ہم راول پنڈی لکھتے ہیں کیا ہوگا obviously what will happen is کہ su kk ur جو ہے they will be replaced by the same number of characters from راول پنڈی راول پنڈی بڑا ہے but what will happen to the extra characters in the word راول پنڈی they will continue writing beyond the space occupied by سکھر and will probably over write his or her date of birth and maybe even over write some of the remaining data so your file corrupt ہو گئی اب وہ اس طرح سے پڑی نہیں جاہل سکتی نہ ہی اس کا وہ structure رہا ہے جب آپ نے لکھا تھا وہ والہ structure تو رہا نہیں so it is very very tricky if you want to write data into the middle of a file دیکھیں problem کیا ہے file ہماری جو ہے وہ disk پر پڑی ہوئی ہے ہم نے اٹھایا اس کو پڑنا شروع کیا درمیان میں گئے اب ہم کہتے ہیں یہاں بھی ہم نے data ڈالنے لیکن data کا size بڑا ہے جو original data جس کو رپلیس کرنا چاہ رہے ہیں وہ کم تھا اور یہ زیادہ جگہ لے رہا ہے اس طرح سے سوچیں کہ جی disk پہ کیا ہو گا disk پہ we want to have some kind of a mechanism جو file کو وہاں سے کاتے اور اس کو you slide کر دے تاکہ تھوڑی سے بیچ میں جگہ extra بن جائے اور پھر ہم بیچ میں لکھ سکیں ہوتا نہیں ہے you پرانے زمانوں میں بھی cobalt یا بڑے computer کے اندر the method used to insert data into the middle of a file was emerge method اور آپ بھی دیکھنے لوجیکس کا یہی ہے کہ جہاں پہ ہم data insert کرنا چاہتے ہیں beginning سے لے کے وہاں تاکہ data اٹھا کے دوسری file آپ ایک کھول کے اس میں لکھنا شروع کر دیں ایک file اپنی original data file کھولی ایک نئی empty file کھولی شروع سے copy کرنا شروع کر دیا اس file کے اندر جب تک آپ اس position پہ نہیں آتے جہاں پہ آپ data ڈالنا چاہتے ہیں جب اس position پہ آئے تو نئی file کے اندر وہ اپنا نیا data ڈال دیا جب وہ دل گیا تو پرانی جو لکھی ہوئی file تھی اس سے وہ jump کیا جو data آپ کو نہیں چاہئے اور اس کا باقی والا حصہ وہ اس file میں copy کر دیا this is the only real way of putting data into the middle of a file and then you can close both files, erase the first one and rename the second one or whatever you want to do this was done in the older days and even now it's a valid technique depending on you know how much data, how many files, how many insertions کرنی ہے لیکن obviously it is also very wasteful بہت time اور effort جایا ہوتا ہے اگر آپ نے ایک file جیہاں اس کے اندر ایک modification کرنی ہے تو اس کے لئے آپ پوری file copy کرنے لگ بڑے think about it file could be several megabytes or even gigabytes in size تو اس کے اندر ایک words بدلنے کے لئے آپ پوری gigabytes کی copy کر رہے لہذا ہم نے کچھ آئے میکنیزم بہت ہی جانتے ہیں جو ہمارے پاس ہمارے پاس ہونے چاہئے اور اس کی کوئی structure ہونا چاہئے جس کے تحت ہم جب یہ اپڑیٹس کریں وہ file خراب نہ ہو c or c++ یہ file کے اوپر اپنی طرف سے کوئی structure impose نہیں کرتی the language does not impose any structure in the file as far as these languages are concerned a file is nothing but a stream of bytes bytes لیکی ہوئے ہیں جی اس میں انگریزی ہو، ڈیٹا ہو، بائنری ہو language کو اس کے ساتھ کوئی زرز نہیں ہے it thinks of it as a stream of bytes now obviously if we want an updatable file especially اسی طرح کی جیسے میں نے کہا کہ جی student record so it makes a lot of sense کہ جی ہر student کا جو ڈیٹا ہے وہ ایک جتنی جگے جو ہے نا وہ occupy کرے اگر کسی کا ڈیٹا کم ہوگا کسی کا ڈیٹا زیادہ ہوگا تو یہی updates کے مسئلے رہیں گے even if we access the file randomly so what we want to do first of all is make sure that the size of each student's data is identical in the file اس کے بعد اگر ہم نے کافی جگے چھوڑی ہوئی ہے تو جگے زیادہ چھوڑ دی اس کے اندر سکھر لکھ دیا سکھر کو اٹھا کے راول پندی کر دیا کال کو اس کو میرپور کر دیا کوئیٹا کر دیا کوئی فرق نہیں پڑے گا فائل کا سائز نہیں بدلے گا so that is the key element کہ if you use a constant length of data for a record for representing information then you can update data right in the middle of the file and not affect anything else normally اس کے سم کی فائلیں جو ہے ان کے اندر ہم کوئی کی بھی رکھ لیتے ہیں it's a data based terminology the key to a record which means کو a record دھوننا آسان ہو جائے اسی اگر ہم نے اس میں لکھا ہوا تھا student کا نام اس کا شہر اور اس کی date of birth تو اس کو دھوننے کیلئے ہم کیا کرتے؟ اگر ہم کہتے کہ جمیل احمد کا record you have اس کو سکھر سے راول پندی لے جاؤ so we would have written a loop which said نام پڑھو اور اس کو compared کرو to جمیل احمد and if this is the same جمیل احمد یا match ہو جائے تو پھر آگے کام چیا جائے گا it is also very expensive in terms of computation اس کے لیے it would be nicer اگر ہم students کے ساتھ ہم ایک serial number بھی چلا دیتے which would be unique ہوتا ہر student کے لیے now that could be your roll number or your id number so if that was the case then we would have said کہ not just جمیل احمد student number 43 کی city کو سکھر سے راول پندی کر دو now not that comparison ہم نے کرنا پڑا لیکن it becomes easier it becomes even more easy if the file itself is sorted in other words اگر وہ ان ڈی نمبرس پہ سوٹڈ ہوں اور ہمیں یہ بھی پتہ ہو کہ جی ایک دو تین چار یہ سارے ویلڈ ڈی نمبرس ہیں students کے یا کی ہے انٹو دس فائل اس کے اندر کوئی ہولز نہیں ہیں یعنی اگر سو سٹوڈنٹس کا دیتا ہے تو پہلے ریکوڈ کا نمبر one ہے اور اخیر والے کا سو ہے کچھ اور کنڈیشنز اگر دال دی جائیں تو لوکیٹ کرنا دیتا کو انہ فائل becomes very very easy let's think about this example a little bit more لیکن ہم نے کہا کہ جی ہم students کا دیتا اب سو بائٹس میں رکھیں گے سو بائٹس میں اس کا نام بھی آ جائے گا شہر بھی آ جائے گا ڈیٹ of worth let's assume that اور ساتھ ہم نے اس کے ساتھ ایک سیرل نمبر بھی لگا دیا اور سیرل نمبر بھی انی سو بائٹس کے اندر شامل ہے اب اگر میں کہوں کہ جی 23rd student کا دیتا لائے جائے تو کیسے کریں گے ایک طریقہ تو وہ ہی ہے جو ہم ابھی بات کر رہے تھے brute force ٹیکنیک کی اوپر سے پرنا شروع کر دو اور جب تک اس کا ڈی نمبر یا کی جو ہے یا سیرل نمبر وہ 23 کے برابر نہیں ہوتا فائل میں آگے کو پڑھتے جاو اس پر سپوز ہی've ڈیٹ these condition کے جی each student's data consists of 100 bytes it is in order which means 1 comes before 2 which comes before 3 and so on it has no holes یعنی 1 or 2 کے بعد 3 ہی آئے گا 4 نہیں آئے گا یعنی 3 کا record ہی missing ہے it will always be sequential 1 2 3 4 5 اگر یہ ساری condition ہمارے پاس ہوں تو can we think of a quick way of finding the 23rd student data well the answer is obvious کیجی ہمیں پتا ہے ایک student کا دیتہ کتنا ہے تو پہلے بائی students کا دیتہ جو ہے وہ 22 times 100 bytes یعنی 2200 bytes آپ گزار دیں اور 2200 1th byte جو ہے 2200 1th byte وہاں سے 23 میں student کا دیتہ شروع ہوگا so how do we get there سیک جی simple سیک جی کو کہیں کہ جی 2201 bytes سیک کرو from the beginning of the file one command jumps right there no wasteful if and comparisons no wasteful running through a loop trying to go there you jump straight to the position you have the data پھر دیتہ کا اپنا سٹرکچر بھی آپ کو پتا ہونا چاہیے کہ جی نام ہم نے 30 characters میں رکھا ہے شہر کا نام بھی ہم نے 30 characters میں رکھا ہے beginning والے 10 characters جو ہیں وہ رکھے ہوئے ہیں serial number کے لیے اور اخیر والا حصہ جو ہے وہاں نے رکھا ہے date of birth کے لیے so now you can go inside the student data and change or update anything you want you can add suffixes or prefixes to the name you can change the student city you can correct the date of birth if it was erroneously entered and so on so seek g allows you to jump to any position in the file obviously seek g is being used for read files in files and seek p ہم استعمال کرتے ہیں for output files لیکن یاد رہے پشتے لیکچہ سے بھی اگر ہم نے file کھولی تھی f stream کے ساتھ یعنی ہم نے اس کو declare کیا تھا as f stream type of file then it can be opened both for input and output اس کیسم کی updates جو ہیں وہ ہم f stream type of file کے ساتھ کر رہے ہوتے ہیں i f stream فائل جو ہے اس کے اندتہ اپڑیٹ آپ کرنے ہی سکتے o f stream فائل کو آپ پڑھ نہیں سکتے so normally input output جو آپ نے کرناو ایکی فائل کے اندر تو ہم اس کو f stream کے ساتھ کھولیں گے اور اس کے ساتھ کالی فائر بھی دیں گے open کے ساتھ it is i os colon colon in or جو پائپ کا سیمبل ہوتا ہے vertical bar جو ہے i os colon colon out یہ ہم کیوں اور کر رہے ہیں ان کو دیکھیں اور کا آپ کو logic یاد ہوگا one or zero is one zero or one is one one or one is one اگر دو بائٹس جو ہیں ان کے اندر zero's اور one کے کچھ پیٹرن پڑے ہوئے ہیں ان کو ہم اپس میں or کرتے ہیں so bit by bit oring ہو جاتی ہے جس بائٹ میں بھی one لکھا ہوا تھا وہ results میں one لکھا ہی جاتا ہے now if you look at in i os colon colon in اور out کیا چیز ہیں they are actually numbers in memory they represent flags ہر bit position کچھ بتا رہی ہے کہ یہ فائل input کے لیے استعمال ہوگی کہ output کے لیے ہوگی so input کے لیے ایک orbit ہے output کے لیے ایک orbit ہے ان کو جب ہم اور کرتے ہیں تو resultant کے اندر دونوں bit سیٹ ہو جاتی ہیں which basically tells the input output system کہ یہ فائل input کے لیے بھی استعمال ہوگی اور output کے لیے بھی استعمال ہوگی اسی ٹیکنی کو استعمال کرتے بے آپ یہ جو qualifiers ہیں file opening کے لیے ان کو کئیوں کو اور کر سکتے ہیں remember that it is not a case of and please be aware of that حلہ کہ ہم چاہتے یہ ہے to open the file for input and output ہم اس کو استعمال کرنے کے لیے ہمیں i os colon colon in اور i os colon colon out کرنا پڑتا ہے once we do that we can use a file for input and output ok let's move on from here a little bit and see کہ جی ان ساری tricks کو ہم استعمال کیسے کر سکتے ہیں ایک طریقہ تو ہمیں ایک example discuss کر رہے تھے کہ جی file کے درمیان میں کچھ ڈیٹا ڈیٹ کرنا ہے what about if we know exact things and we want to replace a few characters in a sentence well think of the logic first it's always has to do with logic and analysis کہ جی algorithm کیا ہوگا ہم نے لکھ دیا this is an apple ہم اس کو چینج کرنا چاہتے ہیں to this is a sample interesting length of the string جو ہے وہ برابر ہے یہ file میں پڑی ہوئی ہے so اب آپ کو کرنا کیا ہے کہ جی ایک file بنائیں اس میں لکھ دیں this is an apple پھر اس کو seek جی کر کے آپ پتا کریں کہ جی کہاں پہ آپ مطلب tell جی کے ساتھ پتا کریں اور seek جی کے ساتھ موگ کریں اور پھر اتنی سی bytes لکھتے ہیں جو کہ an apple کو a sample میں تبدیل کر دیں try to play with that so there are lots of things you can do with it let's take another example which is even more interesting ہم نے کہا کہ جی file کو character by character پڑھکی آپ دوسی file میں لکھ سکتے ہیں screen پہ پھیک سکتے ہیں and so on and the function we used for that purpose was get اس وقت اگر file کو آپ نے read کر کے کسی اور file میں write کرنا ہے تو you already have enough tools you can get one byte at a time from one file and put it into the other file ایک فائل پڑھی جائے گی لکھی جائے گی so you have my input file.get c is a character اور دوسی طرف ہوگا my output file.potc تو ایک فائل پڑھی جائے گی لکھی جائے گی I mentioned last time that this is also a very inefficient way of doing things اور وہی جو ابھی تھوڑی دیر پہلے بھی بات کی کہ جی disk کے اوپر لکھنے پڑھنے کے لیے chunks of data زیادہ efficient رہتا ہے can we handle more data than a single byte اور سنگل لائن the answer is yes we can use the read and write functions یہ بھی ہمارے لیے provided ہیں any stream manipulators کے ساتھ یا stream functions کے ساتھ جو ہمارے objects بنتے ہیں input or output streams کے ساتھ read جو ہے اس کو ہم ایک array یا سمجھلے memory میں جگہ بتاتے ہیں اس جگہ پہ لکھنا پڑھکے یہاں پہ بائٹس لکھ دو اور ساتھ ہم بتاتے ہیں کہ جی کتنی بائٹس لکھنے ہیں یا پڑھنے ہیں so we say read اور آگے ایک memory location بتاتے ہیں usually it's an array comma and the number of bytes to be read and put into that array now depending on your computer's memory you can have a very مجھے نمبر سیٹنگ over here you could have 64000 تک ہے اور actually you could have 6564 کے 64 کے کتنہ ہوتا ہے یاد ہے کچھ it's two to the power something so it's not 64000 ہمارے computer language کے اندر it is 65536 اس کی اچھی چیز یہ ہے کہ جی دسک read right آج کل جو modern disks ہیں وہ 64 کے کچنگس میں کم از کم ضرور پڑتی ہیں کئی دسک ہے تو buffering کر کے اس سے بھی زیادہ پہ چلی جائے آتی ہیں لیکن that means one come on to the disk remember from last time I said کیجی a few milliseconds are used up in trying to access the disk so one use of a few milliseconds and you get 64000 یا 65536 to be more accurate bytes back so you can do a lot of fast reads and writes what you should do is you should write two programs ایک پروگرم جو ہے وہ get کے ساتھ فائل کو پڑے اور put کے ساتھ دوسی فائل میں لکھتے فائل جو ہے آپ نے لیے بنالیں چیک ہے نا notepad استعمال کر لیں یا wordpad استعمال کر لیں make it a simple character file ہر لین کے اوپر آپ لکھتے اے سے لے کے زیادہ تک 0 سے لے کے 10 تک یا 9 تک اچھٹرہ دیٹہ دالے کوپی پیست کر کر کے نا فائل کو بڑا کر لے جب آپ تھک جائیں گے نا کوئی سوکو لائنے ہو جائیں گی okay آپ کیا کریں تو ان کو ساروں کو سیلیکٹ کریں کوپی کریں اور پھر اخیر پہ جاکے پیست کر دیں تو سوکو لائنے پیست ہو جائیں گی do this so you have a healthy sized file so you have a file of a few k اگر جو آپ میں سے زیادہ ایڈونٹرس ہیں وہ program لکھ کے یہ ایک فائل بنالیں آپ نے لیے کافی ساری بڑی ہو مطلب 30 کے 40 کے 60 کے کی کم اس کم ہو ایک فائل بڑا جو ایک فائل کو بڑی ہو جائیں گی now what you want to do is to read this file using get and write it into another file using port اور ساتھ آپ گھڑی سے ٹائم دیکھیں کے جی کتنا لگا problem یہ ہے کہ آج کال کے کمپیوٹر بہت سیادہ تیز ہیں تو usually آپ کو پتہ نہیں چلے گا جی کتنی جلدی یہ جو ہے نا آپ نے فائل کا کام کر لیا ہے اگر آپ چاہے تو ٹائم کا فنکشن بھی ہے جسے آپ ٹائم دسپلے کر سکتے ہیں پرنٹ کر سکتے ہیں program کے اندر سے but for those of you who want to investigate and I strongly urge go look up the time function time function آپ کو کچھ return کرتا ہے that's usually seconds you can print those on the screen go do the file copy and call time again and print that that will tell you کتنے سیکنز یا ملی سیکنز یا 100th of a second لگے ہیں to copy this file having done that get or put کے ساتھ فائل کوپی کر لیا آپ نے اب آپ اس کو read or write کے ساتھ کوپی کریں کیسے کریں گے پہلے تو آپ ایک character ڈیرے ڈیکلیر کر لیں تیک ہے نا 4 string let's say 10,000 hopefully again computer memory آپ کو لیمٹ نہیں کرے گی آپ 10,000 ڈیرے ڈیرے ڈیرے ڈی فائن کر سکیں گے اس کے بعد جو انپروٹ فائل ہے اس کا آپ read function call کریں گے سوی will سے my input file ڈیرے ڈیرے پہلے آپ اس ڈیرے کا نام دیں گے let's سے ایرے کا نام ہم نے ڈیرے ڈیرے رکھا ہوں گے تو paranthecer کے اندر ڈیرے ڈیرے ڈیرے ڈیرے ڈیرے ڈیرے ڈیرے ڈیرے ڈیرے ڈیرے ڈیے ا چیز سب سے ا چیز سی کو لکھنے کے لیے you would use my output اپنے بریک چنے میں ایک اپرٹ فائل کہاہی ہے کبی اپنے بریک چنے میں اپنی فائل کہاہی ہے پھر اُس کا سجن کس کی نام دے دیں مطلب ایرے کا نام اور پھر آپ اس کو کہدیں کہ دس از آر بائٹس دونے ہیں ناؤ ایک ناہ ، سمجھا ہے آپ کو پیدا لیکنے کے ساتھ آتے ہے آپ آئے جو کسی آری بھرکشا ہے چی کسی ہے؟ ایک تو کالوں کولشپنے ہوا جائیں گی دس از آر گٹس کی جگہ پے ایک ریڈ اشو ہو رہا ہے، سو پرسیسر ٹائم بگرہ کم استعماد ہو رہا ہے۔ دوسرا یہ ایفیشنسی جو آرہی ہے وہ فیزیکر دیسک ریڈ اور رائٹ سے آرہی ہے کہ جی وہاں پہ بھی آپ کو ہیوڈ امامٹ افیشنسی مل سکتی ہے۔ جو اس میں فائن پوڈنٹس ہیں وہ آپ کو I will leave for you to discover. فائن پوڈنٹس یہ ہیں کہ جی کہ آپ کی فائل exactly 10,000 کے ملٹپلس کی ہے یعنی یا 20,000 کریکٹرز کی ہے یا 30,000 کی یا 40,000 کی۔ ملٹپلس کیا ہے کہ اگر 20,935 بائٹس ہے تو یہ کسی بیٹس ہے۔ سو پرسیسر ٹائم بگرہ کم استعماد ہے۔ سو پرسیسر ٹائم بگرہ کم استعماد ہے۔ بہت آپ کو کسی بیٹس پرسیسر کیا ہے؟ کیا انڈوالی جو ریڈ کی کال ہے اس نے 10,000 بائٹس پڑی ہے کہ نہیں پڑی؟ آپ کو کسی بائٹس پڑی کیا ہے کہ آپ کو ایک سو پرسیسر بیٹس پڑی کیا ہے بہت Drew اگر بائٹس پڑی کسی بیٹس پڑی ہو혼 Там胇س سبہumbled، تو کسی لیٹی میکرا کیا ہے کہ آپ کو کسی بائٹس پڑی ہوتی ہے ابھرون Whoops teachings کو کے حقیت کوکوہر ہے اور اگر جو اegalش Growing ڈیسپڑیời کسی بیٹسی پڑی ہیں اسی طریقے سے ایک اور ایک سامل بھی آپ کر سکتے ہیں۔ کیونکہ آپ اپنی فائل میں راقب کرنا چاہتے ہیں؟ یہ جانتا ہے کہ ہم ایک ٹکسٹ فائل پڑی ہوئی ہے، اس کو کھولنا چاہتے ہیں اور کھول کے پڑھ کے اس کو ان راقب کرنا چاہتے ہیں، نائی فائل کے اندر جانتا ہے کہ سب سے اخیر والی بائٹ سب سے بگیرنگ پہ آئے اس سے پسلی بائٹ نیکسٹ آئے اوٹپٹ فائل میں اوٹپٹ فائل میں راقب کرنا چاہتے ہیں۔ جو انپٹ فائل کی پہلی بائٹ تھی وہ اوٹپٹ فائل کی آخری بائٹ بن جائے بائٹ اور کیریکٹر میںریش د показывا ہوں۔umbsی ہوتے ہیں؟ آپ کیا how would we do this؟ ماہر اس کی جانتا ہے؟ کیا خیال ہے؟ آپ اپنی دو انپٹ فائل کھول گئی؟ انپٹ فائل اپن ساتھ، نام دیتا ہے۔ اب کھان جائیں؟ اب کہاں جائیں؟ ایک طريقہ ہے کہ اس کے اخیر پہ جائے جائے اور اک ایکキャركتر پیچھے کو پڑھا جائے right so that's a good logic جو کاریکٹر پڑھا وہ output فائل میں output کر دیا so last goes first, second last goes second ). and so on logic is fine little trick is how do you go to the end of the file I think we already covered that in this lecture let's say seek g استعمال کرتے ہیں ہم کہتے ہیں سیک جی زیرو کاما ایو اس کولن کولن انڈ سو یہ فائل پوانٹر کو فائل کے انڈ پر پوزیشن کر دے گا لیکن رمیمبر what does سیک جی دو ات پوزیشنز the پوانٹر to the پوزیشن جہاں سے آپ next چیز پڑیں گے ہم نے کہا ہے پوزیشنز it to zero from the end of the file so it positions it at the end of the file can we read the next bite next bite ہمیشہ آگے کو پڑی جاتی ہے it doesn't work so what should we do we should position it one before the last bite so you don't want to go to the end you want to go minus one comma ios colon colon end ایک تو یہ تھوڑی سی ٹریقی بات ہوگی کہ آخری بائٹ کو پوزیشن کرنے کے لیے it is one before the end of the file یہاں سے آگے پڑیں گے تو یہ بائٹ پڑی جائے جب بھی بائٹ پڑی جاتی ہے جب بھی کوئی کاریکٹر آپ فائل سے پڑتے ہیں تو فائل پوانٹر آگے کو چل جاتا ہے جیک ہے so it moves one position it's now ready to read the next character اسی کو اگر دیکھیں کہ ہم نے end سے ایک پہلے ہم نے position کر لیا اب ہم نے ایک کاریکٹر پڑا تو یہ پوانٹر کہاں چلا گیا it went to the end of the file again but now the next character we want to read is this one the second last character of the file so what should we do end پے جاکے ہم نے اب minus one or minus two تک move کرنا ہے but ends a minus one minus two ہی move کریں گے جنی minus two from the end or should we use something else we already know what else to use the other one is current position so اگر آپ current position سے minus two move کریں گے you will be ready to read the next character لیکن کیا ہوگا سب سے پہلے ہم نے فائل کھولی ہم نے end پے گئے اور end سے minus one پہ position کر لیا کاریکٹر پڑا تو آپ end پے چلے گئے اب end کو بھول جائیں کہیں یہ ہماری current position ہے اس سے move کریں minus two تو it will go one before the character that you just read you read this character you come to the last character of the file that is now your current position you go minus two again so you'll go to the third last character and so on so a little bit tricky but interesting logic آخری کرکٹر پڑنا ہے تو end سے minus one پہ position کریں اس سے پشلا کاریکٹر پڑنا ہے after reading the next the last character position it to before the current position so آپ کو جو لوپ چلانی ہے وہ اس طرح کی ہے کہ current position سے minus two پہ move کریں ختم کہاں کرنا ہے ختم کرنا ہے beginning of the file پے اس پہ بھی دیکھیں کیا logic لگتا ہے جب آپ second character پے پہنچتے ہیں second character تو آخری میں اس پوشmellow گوکٹر کھان چاہیے پس--" you go the push blow out so you go to position one you go bad but so you will also get your position one in the spot so you go you go to position one because position zero is the first character so you go second character جیبitzer آخری پڑھا تو you go to position number two in the file. you go minus two you go to position zero. your position zero سے آپ نے پڑھا تو opposition one پی آگئے اب minus two پہ جا سکتے ہیں you can't go to position minus one in the file. so جو آپ کی loop کا termination ہے has to look for this position کہ جی file کی current position کہاں ہے اور کہاں تک یہ loop چلانی ہے so try to work the logic out. I'm not going to tell you all about it ان letٹ also try to work that and see if you can move the file or copy the file from one to the other in reverse order تیم اتنا ہی لگے گا which means you have to you have also discovered that seeking is quite fast itsاندر it is absolute moves ایک اندر زیادہ دیر نہیں دکتی itschestnth are not that longbreviately if statement is very expensive remember that computation wise کہ جبگی if کرتے ہیں وہ کھئی stuff failures can't know ساکل لگتے ہیں اف کو کمپوٹ کرنے کے دی ہے سیکوینچل ریڈ is فیرلی فاست but it's تیڈیس سوامی پوزیشن پر جانے کے لیے ایک ایک کر کے آپ کو سو دفعہ ریڈ کرنا پڑے گا before we go there if you go seek to the 100th position it is very fast as compared to a سیکوینچل ریڈ maybe it takes some amount of computer resource but definitely in comparison to what else you can do it is very very fast now in terms of speed obviously i mentioned earlier read and write are like the fastest you can do so when you're wanting to read big chunks of a file and you have enough ram to do so یعنی ممری میں جگہ کافی ہے تو پھر read استعمال کریں اور اس طرح لکھنے کے لئے write استعمال کریں میں نے آپ کو read or write کر بڑا ایک سمپل سا example دیا تھا کہ یہ ایک سٹرنگ لے لیں اور number of bytes بتا دیں actually it is more general than that اگر آپ بھک میں دیکھیں گے تو وہ گھمبیر سی انہوں نے expression دیو ہی ہے reinterpret cast پھر پر انتیسیز کے اندر cons 4 pointer فلانا فلانا is a گبرانے کی ضرورت نہیں ہے actually what is happening is کہ جی read کے لیے بھی آپ اس کو ہم نے ڈرے استعمال کی تھی تو یاد ہوگا ڈرے کیا ہوتا ہے ڈرے کا نام جو ہے it's a pointer to the beginning of the array so بیسی کلی جو read function ہے it requests کیا کہنا چاہیے a pointer to the beginning of a memory location and then it requires کتنی bytes پڑھنی ہیں so it's a simple pointer issue so جب یہ reinterpret cast اور cons 4 pointer وگر آ رہے ہیں write کے ساتھ اور read کے ساتھ جو ہے وہ cons نہیں آتا ہے just 4 pointer آ جاتا ہے what these functions are expecting is the address and then a number a number of bytes to be read or written جیادہ اچھی چیز یہ ہے کہ ہم اپنے programs کی اندر کوئی absolute numbers یا کوئی magic numbers ڈردیوز نہ کریں so if I want to write an integer into a file especially aچا read and write by the way are binary functions they write in binary they do not write characters so you have to be very aware of that and that is the usefulness when we combine this with random access anyway when we want to write an integer into a file اور ہم کہتے ہیں کہ جی وہ 4 bytes لے گا ہماری مشینوں کیوں پر integer تو rather than writing something like my output file dot write and I and I means the address of the integer called I جا دھوگا آپ کو ایڈرس اپریٹر ہے کومہ 4 اتنی چار بیٹس میں اس کو لکھو چار بیٹس میں اس باستے کہ جی I occupy is 4 bytes in memory اس سے بہتر طریقہ جو ہے لکھنے کا وہ یہ ہے کہ جی 4 ہمیں نہ لکھنا پڑے ہم کوئی function ہی call کریں جو کہ exactly بتا دے کہ جی انٹیجر کتی جگہ لیتا ہے ممری میں وہ جو function ہے وہ ہے size of size of is a standard function S I Z E O F آپ یہ کرتے ہیں کہ جی something dot write پھر آپ نے ایڈرس دیا اس ویریبل کا کومہ size of name of the ویریبل اب اس کا فیدہ کیا ہے آج آئی جو ہے وہ انٹیجر ہے تو وہ size of آئی جو ہے مین size of integer which will return for وہ چار بیٹس میں اس کی internal representation لکھتے گا اگر آئی کی جگہ پہ آپ x لکھتے ہیں اور x ہے ایک double precision number تو آپ لکھیں گے size of x وہ کیا کیا کرے گا کہ جی double precision کی جیتنی بھی internal representation ہے وہ 8 bytes میں لکھتا یا 12 bytes میں لکھتا ہے ہمیں اب اس کے ساتھ کوئی house نہیں ہے وہ اس کو دیکھ لے گا اس کی representation کیا اور اُتنی bytes میں اس کو لکھتے گا now obviously this does not mean کہ آپ کی لکھی ہوئی file کسی اور computer system یعنی آپ pc پہ لکھیں اور پھر کرے super computer پہ پرنا چاہیں تو وہ exactly پڑی جائے گی because they have different representations but the advantage is that without knowing how much space is occupied by a particular data type on our machines we can write these programs they become in a way slightly more independent of the compilers and of the particular breed of machine that you're working with so size of ابھی ہم اور بھی اس function کو استعمال کرتے جائیں گے it's a very very useful function and you can actually play with it and say کہ جی آپ نے ایک چھوٹا سا پرگرم لکھنے اس میں انٹ بھی دیکلیر کر دیں چار بھی کر دیں دبل بھی کر دیں فلوٹ بھی کر دیں اور کچھ انہیں ڈالنہ صرف size of پرنٹ کر آلی سو جب یاد ہوگا ہم نے big in کے لیکچوز میں میں ہم ایشا آپ کو I didn't want to commit کہ جی انٹیجر اتنی bytes لیتا ہے this is now the time where you can actually find out کہ آپ کی مشین پہ انٹیجر کتنی bytes میں رپرزنٹ ہوتا ہے میمری میں character کتنی bytes میں ہوتا ہے ڈبل کتنی bytes میں ہوتا ہے and so on so play with it write your little programs تاکہ آپ کو پتا چلے کے کیسے ہو رہا ہے so read and write کے ساتھ ہم اگر ایک ہمار پاس variable ہے تو اس کا address دے دیتے ہیں اور ساتھ اس کا size off کر کے دے دیتے ہیں تو read write کام کر جاتے ہیں ہم اس کے ساتھ ہم نے وہ 4 pointer وگرہ لکھنا ہے reinterpret cast لکھنا ہے جو آپ کو بک میں ملے گا actually these compilers are very very intelligent they do that for you سوگر آپ نہ بھی لکھیں گے result تھی کی ہوگا وہ خود ہی اس کے اوپر cast ڈال کے اس کو pointer کو convert کر دے گا کہ this is not just a pointer to an integer it is a pointer to a character کے انٹیجر کو لکھم نے convert کر کے کر کے پھر اس کو 4 bytes میں لکھ دیا now having said this you should now try to write right into a file using the write function تک ہے so open a file اور اس کے اندر کوئی loop چلا کے انٹیجر کو لکھیں آپ اس طریقے سے جب وہ لکھ لیتے ہیں let's say کہ جی for i equal to zero i less than 100 i incremented my output file dot write and i comma size of i a my output file dot close جو بھی my output file کو اپنے اوپر open میں نام دیا تھا دیکھیں آپ کی disk ڈیسپیور فائل بنی ہوئی موجود ہوگی اس کو notepad میں کھولیں دیکھیں کیا نظر آتا ہے کیا آپ کو آئی کی value 0 سے لیکن 99 تک نظر آتی ہیں my guess is you'll find something totally different try to figure out what happened the clue it lies in the fact کہ this was a binary write it is more like the internal representation of the integers not the thing that we see on the screen so play with this and experiment a lot آج ہم نے file handling کی اوپر اور کافی ساری باتیں کی we spoke about access methods how i mean a little bit of techniques about how to put data into the middle of a file the concept of trying to have the same number of bytes in a record so that the file becomes more ordered and how you can either use the old world technique of copying half of a file making a change and copying the rest of the file or using equal length records jumping to the correct record and updating the data lots of stuff binary files کے اوپر ہم نے end کے اوپر تھوڑی سی بات کی ہے کہ read and write are binary functions and they try to represent the internal values and put them into a file جب آپ کوئی چیز right کریں گے اس کو جب آپ فائل read کے ساتھ پڑیں گے تو وہ correctly read ہوگی ہا وہ notepad میں شاید آپ کو نہ سمجھائے کے کیا ہو رہا ہے جو میں نے SPECIFIC EXAMPLE دیا ہے 0 سے لے کے 100 تاک اس کو تو آپ ضرور try کریں اور زیادہ انٹرسٹنگ ہے کہ اس فائل کو آپ read کرنے کی کوشش کریں ان کے use the read into an integer print it out to the screen and tell me what happens can you read from 0 to 99 جو لیمیٹ سیں for loop کی اس کو چینج کر دے 100 to 200 کر دیں for i equal to 100 i less than 200 increment i write کریں فائل کو اسی طریقے سے اس کو read کریں into the variable i and print it out on the screen اب کام کرتا ہے think about it maybe go on to the discussion board and discuss what happened over here till next time اجازت خدا حافظ