 اسلام علیکم سیس ٹ ٹ سی رو بار کارکت ہے آج ہماری ٹ ٴ جھیں ہمارے ٹ ٹی١ ملاقات ہے پیچھلی دفعہ میں نے کچھ سٹرنگ مینایپولی سن اறکتر مینایپولی سن بیناپلیشن اللی کو دخل سکتے تھے اور سیٹائی پڑٹ اے چھیدر فائل اور سٹرنگ deployment اے چھیدر فائل کی ہم نے بات کی تھی اور میں نے پرمیس کیا تھا کہ آج ہم فائلس کے بارے میں بات کریں گے اتنے فائلس today's lecture is the topic of today's lecture. Let's talk a little bit about what a file is. لیکن whenever we talk we start with bits and bytes and you know characters and strings and numbers but ان سب چیزوں کو جب ہم کہیں پے ایک اٹھا کرتے ہیں اور ایک کوئی meaningful چیز بنتی ہے. That ends up being either your program or cpp file a letter, an application, an essay, a novel something like that those are all bigger collections they are no longer bits and bytes, there are words and sentences, etc. and we call that combination of words, sentences, paragraphs or characters as files of course computer میں صرف ای اسز او پلیز یہ والی فائلیں نہیں ہوتی ہے کئی کسم کی ہوتی ہیں but primarily ہم ان کو دو چیزوں کے اندر distinguish کر سکتے ہیں ایک ہے ٹیکسٹ کسم کی فائلیں جن میں readable English characters پڑے ہوئے ہیں these can include programs these can include all of the stuff that you would do with word processing etc. and then there are a second type which are executable programs programs that actually run on your computer اگر آپ دسک پہ دیکھیں گے dos والے لوگ جو ہیں وہ dir کمان چلائیں تو ایک list آ جاتی ہے کہ جی اس دیریکٹری کے اندر کن کنسی فائلیں موجود ہیں windows میں آپ folder کو کلک کریں تو right side پے folder کے اندر جو فائلیں موجود ہیں ان کی list آ جاتی ہے this is a list of files this not characters or bits and bytes it is names that you see the names represent a file file کی اپنی properties لیں تو you'll find کجی اس کی لمبائی بھی ہے اس کی date created بھی ہے and so on so forth but that is not of our interest for today for today what we want to know is کہ جی فائل ایک چیز ہوتی ہے اس کے اندر مطلب ہمارا دیتا بھی سٹور ہو سکتا ہے اور وہ program بھی ہو سکتا ہے چلنے والا program جو دیتا فائلیں ان کے اندر ہم ان کو separate کر سکتے ہیں کہ جی کچھ تو ہے plane text plane text کنسا ہے جو کہ ہم نے notepad میں for example create کیا windows میں notepad کھولا اس میں جو تائپ کر کے سیف کیا it is ordinary text when I say ordinary text it means اس کے اندر کوئی formatting کوئی بیل بوٹے نہیں دلے بے اس کو آپ dos کے اندر type command کے ساتھ چلائیں تو آپ کو جو بھی اس فائل کے اندر لکھا ہے وہ screen پر نظر آ جاتے as is notepad کے اندر کھولیں وہی چیز نظر آتی ہے wordpad کے اندر کھولیں word کے اندر کھولیں word processing program کے اندر وہی آپ کو plane text نظر آتا ہے the same applies to your cpp files کیا آپ کا compiler کا جو ڈیٹر ہے وہ جب فائل کو سیف کرتے آپ کے source code کو تو it is saving it as plane text اس کے اندر کوئی ایسی اندیکیشن نہیں ہے کہ یہ کریکٹر bold کرنا ہے یہاں پہ اندر لین کرنے جو word processing والے حصیم وہ نہیں ہے it is plane text plane text files are the ones that we will be handling today but are they the only type of text files answer is obviously no آپ word processed فائل جو رکھتے ہیں وہ دیکھنا تو ہم نے اس کو ٹیکسٹ میں ہی ہے پرنٹ بھی لینے تو ٹیکسٹ کا پرنٹ لینا ہے لیکن اس کے اندر کچھ سپیچل چیزیں ہم نے کی ہوتی ہے formating کی ہوتی ہے paragraph کی alignment کی ہوتی ہے and so and so forth وہ information جو فائل کے اندر ہی سٹور ہوئی ہوتی ہے جب وہ information فائل کے اندر سٹور ہوئی ہے تو it is no longer plane text not in today's computers remember last time i mentioned کے جی جب یہ see or unix بن رہا تھا تو وہ inline formatting اور جو character enhancement کمان سے وہ inline ڈائیب کی جاتی تھی تو جو چیز ڈائیب کی جاتی تھی کہ جی curly brackets یا angle brackets کے اندر b لکھا ہے for bold تو وہ تو ٹیکسٹ تھا so originally وہاں پہ ٹیکسٹ فائلی رہتی تھی آج کل کے word processes میں جب ہم bold کرتے ہیں تو is there a special code in there which does not print so these files are no longer plane text files same applies to let's say a file that you create with an excel spreadsheet اگر آپ spreadsheet بناتے ہیں تو اس کے اندر نمبر سہیں پر اس کے اندر formulas بھی ہیں formatting بھی ہے cell characteristics بھی ہیں بہتہ حشہ اور چیزیں ہیں lot of information which is not plane text the magic word that i was not using is binary information so in file اندر جو ہم نے text ڈائیب کیا ہے اس کے علاوہ کچھ binary information بھی ڈائیب کی ہوئی ہے but these are not program files these are files that we created using one program or the other microsoft word یا excel یا کوئی اور ہمارے پاس program ہے project management کا کوئی program ہے اس کے لیے so in fileوں کو ہم data files کہتے ہیں then of course there are the program files جو کے computer پہ execute ہو سکتی ہیں those are the executable files so they are something else normally they contain entirely binary information which is non printable so we are going to differentiate between the two and there are different ways of handling these files آج کے لیے what we want to do is move on ان سے کہ جی ابھی تاک ہمارے پاس character variables تھے string variables آئے یعنی character arrays آگیں so arrays سے آگے چلکے ہم اب fileوں کو بھی اپنے programs کے اندر شامل کرنا چاہتے ہیں کیوں کرنا چاہتے ہیں دیکھیں جو بھی چیز computer کی ممری میں ہے وہ تو ہے volatile information which means جب computer آف کیا تو memory صاف ہو گئی اب اگر آپ اپنے program کے حوالے سے اس کو سوچیں تو program کے اندر جو string لکھی ہوئی ہے وہ تو program کا حصہ ہے وہ دسک پر پڑی ہوئی ہے compile ہو گیا جب بھی execute کریں گے وہ string program کو مل سکتی ہے لیکن suppose میں کہتا ہوں کہ جی ایک ہم نے payroll بنانا ہے factory کا تو اس کے لیے پہلے تو data گیدر کیا جائے کہ جی امپلوی کا نام کیا ہے اور اس کی salary کتنی ہے مہینے کی اور وہ انٹر کر کے جا پوری list کمپیٹ ہو جائے تو پھر اس کی attendence لیں ہم کہتے ہیں جی کتنے دن وہ حاضر رہا اور اس کے بیسس کے وہ پر اس کی salary کالکلیٹ کریں اور پھر اس کا report بنی چاہیے تو کیا ہم ہر مہینے سارے employees کی list پھر سے طاپ کر رہے ہوں گے obviously the answer is it would be better اگر یہ information جو کہتا ہے نام اتنا یہ اس کا نام ہے اور یہ اس کی salary ہے وہ کسی فائل میں پڑی ہو ہر دفعہ جب ہم نے process کرنا ہو ہم کہیں کہ جی اس employee نے اتنے دن حاضری لگا ہی اس employee نے اتنے دن کام کیا so on اور process کر کے output لے لی output لے لی تو output کیا کاغز پے نکل آئے گی یا screen پے چلی جائے گی یا اس کو بھی سیب کرنا ہے اگر سیب نہ کیا تو آپ کہیں اہو یہ printer جیم ہو گیا اس پہ تو کاغز پس کیا ہے اس پہ پرنٹ out ٹیکنی نکلا پھر سے پرنٹ آجی دے دو تو جو کمپیٹر اوپریٹر بیٹھا ہوئے وہ بچارا سر پکھر کے بیٹھ جائے گا کہ جی ابھی میں نے ایک ہزار بندوں کی ناہ ہاضری ناہ دالی ہیں بیچ میں اور یہ کاغز پس کیا وہ پھر سے دالو تو it would be nice if we could process this information and create yet another file a text file in this case جو کہ کمپیٹر کی disk اوپر store ہو جائے اور پھر جب جاہیں اس کا print out لیا جا سکے یا اس کی output دیکھی جا سکے this is just a slight i am giving you a feel for a justification for using files why memory is volatile any data that you key in from the keyboard while the program is running وہ بھی volatile ہے volatile جانتے ہیں جیسے جو چیزیں ایوپریٹ کرتی ہیں تو بوٹل کا دکھن کھول لیں تو ایوپریٹ ہو جاتی ہیں this is volatility that means کجی جتی تھی تھی پر program چال رہا ہے جتی تھی تھی تھی کمپیٹر on ہے یہ جو ہمارا دیتا ہے یہ ممری میں موجود ہے کمپیٹر آف ہوا تو دیتہ بھی فارق program بھی زائیہ ہو جاتا ہے مطلب ممری میں نہیں رہتا disk پہ جو execution file ہے وہ پڑی رہتی ہے ہم چاہیں گے یہ کہ جی ایک file disk پے create کر سکیں بار بار اس کو پڑھ سکیں اس کو کچھ manipulate کر کے پروسسس کر کے ایک اور file لکھ سکیں so this is file handling of course آج کے لیکچر میں ہم text files کو handle کریں گے آگے چلکے ہم binary files کو بھی handle کرنا سیکھیں گے let us take a look at کہ جی بیسکلی ہمیں کیا steps کی ضرورت ہے to do some file handling اگر ایک file let us say a disk پہ پڑی ہوئی ہے پہلے ہمیں اسے کھولنے کی ضرورت ہے so we need to open the file then we need to read the file or write into it اس میں لکھا بھی جا سکتا ہے اور پھر eventually ہم نے اس کو بند بھی کرنا ہے we need to close the file so these 3 basic steps یہ تو ہمیں کرنے ہی کرنے open read write and close how do we do that یاد رہے جب ہم نے شروع کیا تھا ہم نے see in اور see out کی بات کی تھی تو میں نے آپ کو انٹروڈیوز کیا تھا اس کو کہ جی یہ سمجھلیں دروازی ہیں by which ڈیٹا can enter from the key board into the program see in and another door from which the ڈیٹا can go out and appear on the screen that was see out technically see plus plus میں ان کو streams کہا جاتا ہے streams کی actual discussion ہم بہت بات میں جاکے کریں گے لیکن آج کے لیے آپ کو کچھ nice streams انٹروڈیوز کرنی پڑیں گی to be able to do file handling یہ ہم see plus plus والی file handling کر رہے ہیں see والی نہیں کر رہے اس کے لیے obviously as باکی چیزوں میں ہوتا رہا ہم ایک header file چاہیے in this case the header file is called f stream now again a nice word to use or a nice name ایک file stream اس کا نام ہے f stream.h so when you're manipulating files تو آپ شارپ include f stream.h اوپر لکھیں گے اس کے بعد دو تین ہمارے پاس option سے پہلی option جی ہے کہ جی ایک file ہم کھولیں جس کو ہم صرف پڑیں گے which is read only which means the file is being used for input into our program so if it's an input file then we should have a stream for input files and that stream logically enough is named if stream so it is input file stream why we are using streams کہ ان کا بیحیویر is very similar to c in and c out ابھی آگے چلکہ ہم دیکھیں گے وہی والی ساری چیزیں ہم کر سکتے ہیں لیکن ان کے ساتھ ہم اور چیزیں بھی کر سکتے ہیں اسی طرح اگر ہم file لکھنا چاہتے ہیں تو اس کے لیے ہمارے پاس جو stream available ہے وہ ہے o f stream output file stream اس کے ساتھ ہم فائلیں کریٹ کر سکتے ہیں اور لکھ سکتے ہیں دس کے اوپر کہ ہم ایک فائل کو پڑھ کے اسی میں لکھ سکتے ہیں واپس پہلے تو تھا if stream سے ہم نے ایک فائل پڑی اور o f stream سے ایک فائل لکھ دی what about if I want to read a file make some changes in it and write it back again if you think programmatically or logically you see look I can do this by reading a file making manipulations and writing it out closing the files deleting the original one and renaming the new file to the old name effect تو وہی ہوگا کہ جی پورانی فائل پڑی اس میں manipulate کرکی ایک نئی فائل create کر دی کسی نام سے بھی جب کام ختم ہو گیا تو پورانی delete کر دی اور نئی فائل کا نام بدل کے پورانی فائل کا نام لکھ دی but there is an easier way اس کے لیے we use just f stream فائل stream جو پر input اور output دونوں کے لیے استعمال ہو جاتی ان کو استعمال کرنے کا طریقہ کیا ہے let's take a look first of all include تو program کیا نا چاہیے f stream.h اس کے بعد ہم streams declare کرتے ہیں اب see and see out ہم نے declare نہیں کیا تھے کیونکہ وہ i o stream کے اندر define تھے اور یہ keyboard اور monitor ہر computer کے ساتھ ہے so there was a short hand available یہاں پہ جب ہم if stream کہتے ہیں تو اس کے آگے ہم ایک variable کا نام لکھتے ہیں which is going to be the understandly handle یا نام جسے ہم فائل کو refer کریں گے so it's like an internal variable by which we will be handling files which are actually setting on disk so if we want to use an input file which means اس کو ہم پرنا چاہتے ہیں تو اس کی declaration ہو جائے گی if stream space file کے handle کا نام it's a name you can use my file my input file anything that is useful anything that is self-explanatory for example if I want to process the payroll I would say if stream payroll data یہ فائل کا نام بن جائے گا اور پھر یہ handle ہے it's a variable which is inside the program ابھی ہم فائل تک نہیں پہنچے فائل تک پہنچنے کے لیے اس کو کھولنا پڑتا ہے so we need to open the file well it should logically there should be a function called open and there is one it is called open except how do we use it use کرنے کا طریقہ یہ ہے کہ جیسے ہم نے کہا my file if stream my file اب my file جو ہے اس ویریبل کو ہم associate کرنا چاہتے ہیں کسی magic طریقے سے with the file that is sitting on disk پڑھیں گے تو ہم کہتے ہیں my file.open ابھی کے لیے یہ زراہ سا magic لگے گا کہ یہ dot کہاں سے آگیا لیکن یہ طریقہ یہ ہے کہ جی my file ایک stream object ہے اور اس کا یہ ایک function ہے ٹھیک ہے نا بعد میں ہم تھوڑ سے نام بھی add up کر دیں گے یہ آپ کے درمیانے والے حصے کے بعد جو دیسکشن ہوگی اس course میں اس میں ان کو نام ہم بلوانگز to this stream object the file stream اور ہم کہتے ہیں my file dot open because it's a function آگے parenthesis ہیں اس کو arguments چاہیے پہلا argument وہ جو file پڑی ہوئی ہی اس کا نام ہوگا and the name is represented by a character string so double quotation marks کے اندر آپ file کا نام لیکنے file کا نام roll dot text txt it can also be a fully qualified path name what is meant by a fully qualified path name آپ دیکھیں گے کہ ہم آج کل کے modern operating systems میں جب file ان سٹور کرتے ہیں تو اوپر سب سے ہم اس شروع کرتے ہیں کسی drive کے نام سے یہ modern operating systems means dos and windows so we have a c drive and a d drive and an e drive اس کے اندر کئی folders ہم بنا لیتے ہیں let's say my progs آپ نے شد بنایا بھی ہو for saving your work for this course so وہ ایک folder بن گیا اس folder کے اندر ایک file پڑی ہوئی ہے called payroll dot text جس کو کہتے ہیں fully qualified path name which means کہ وہ اوپر سے شروع ہوتے اور پورا رستہ بتاتے path بتاتے how to get to this file so the path for this file would be my progs backslash payroll dot text this is the fully qualified path name and then there's a shorthand the shorthand is کہ جی اس وقت ہم اس folder میں بیٹ کے کام کر رہے ہیں جس میں ہم programming کریں جس میں program save کریں جہاں سے ہم نے program چلانا ہے وہ ہمارا my progs folder ہے اگر file اسی folder میں موجود ہے تو پھر ہمیں full qualification کی ضرورت نہیں ہے we don't need to just within quotation ماک سے payroll dot txt that means the file exists in the current folder یہ میں ویسے ساید بتا رہا ہوں but I would recommend that if you are not comfortable with files and folders go into the windows help system and read up on it it's a hierarchical file system کہ اوپر disk ہے پھر اس کے اندر folders ہیں folders can the sub folders ہوسکتے ہیں and so on and of course folders can create or contain folders as well as files so there is a multi level hierarchy unix کے اندر you نہیں ہوتا unix کے اندر there is a single top level that is called the root root سے آگے ساری چیزیں چلتی ہیں so it's like a tree modern operating systems کے جو directory structures ہیں they are like a tree except tree جڑ اوپر ہے اور شاہیں نیچے کو ہیں یہ شاہیں یہ ان کے folders ہیں or folders can the sub folders ہیں and so on فائلیں ہماری کسی نہ کسی folder میں ہوتی ہیں so that aside once we need to open a file we say my file.open and then within parenthesis within quotation marks we give the name of the file whether it's a simple name or a fully qualified path name ساتھ ہم یہ بتاتیں کہ جی اس فائل کے ساتھ ہم نے کرنا کیا ہے what does that mean that means کہ جی ہم اس فائل کو پڑنا چاہتے ہیں یا اس میں لکھنا چاہتے ہیں یا اس کے ساتھ کچھ اور کرنا چاہتے ہیں کہ جی اس میں کچھ ایکسٹر چیزیں ایڈ کرنا چاہتے ہیں and so on how do we tell that to the program پہلی چیز there is some intelligence already built in ہم نے ایک variable declare کیا تھا if stream اور اس کو نام دیا my file so the type of the variable was if stream جب ہم نے if stream لکھ دیا it is input file stream so if stream type variable کے ساتھ stream کے ساتھ جب بھی ہم فائل کھولیں گے it will automatically be opened for input in fact you cannot open it for output so all you need to do is my file dot open within parenthesis quotation marks میں فائل کا نام دے دیں فائل کھول جائے گی اور اس کا جو بھی اندر چیزیں وہ آپ کو ہمیں آپ کے ساتھ جو اسے دیتے ہیں میں نے کہا یہ سٹریمز ہیں تو اگر سٹریمز ہیں تو بالکل سٹریم کی طرح بھی ہمیں ایکسیس کر سکتے ہیں اب ہم سیٹھ ٹکسٹ فائلوں کی بات کر رہے so if i say my file greater than greater than کسی ویریبل کا نام تو یہ بالکل see ان کی طرح چلے گا کہ فائل کا جو بھی پہلہ word بنتا ہے وہ نمبرز ہیں یا ایک word ہے وہ ویریبل کے اندر آجائے گا تو یہ جو مجھے جانتے ہیں لہذا سی اپنے پر لئے آتا ہے کہ بچا اپنے پر تک سن Ble it اور پھر اپنے پر بے اپنے پر بچا بدائی ہے جو ظاہر� کو بچا دیکھنے کے済ان ہوتی ہے ج우acağım ہوتی ہے کباری کیا تو بچا برینemale سی اپنے پر بچا دیکھنے کے اپنے تو کیسے تہالے چھوڑا ہوتی ہے اس بولنی کے حوالی ایک اپنے پر بچا دیکھنے کیا تو بچا برینل کیا تو اپنے پر بچا ایک فائل میں کیونکہ کئی برد ہوں گے سو you will have to call it repeatedly you can use the stacking of the extraction operator you can say my file greater than greater than variable one greater than greater than variable two and so on but there are other ways of doing it and we will come to them we are trying to combine quite a few things here together the important thing to remember is it's a file stream so it behaves exactly like see-in and you can use the same see-in type syntax to read it the other thing to remember is جب ہم نے یہ فائل کھولی ہے تو اس کے بارے میں ہمیں کچھ information پہلے سے ہونی چاہیے وہ information ہوگی تو ہم پڑیں گے نا کہ جی پہلے نام لکھا ہوگا پھر تنخہ لکھی ہوگی or something like that تو پہلے والے ویڈیول کو شہدھ ہم سٹرنگ کے اندر لے جائیں دوسرے والے جو بھی پڑھیں گے فائل سے وہ شہدھ ہم نمبر کے اندر نمیریک ویڈیول کے اندر لے کے جائیں so we have to know something about the file structure to use it correctly that must be done that must be there once we have read the file we must close it it is our responsibility to close the file so we must say at the end of all the processing we should say my file.close یہ بھی function call ہے and as a function call اس کے آگے بھی parentheses لکھیں گے ہم لیکن parentheses کے اندر کچھ نہیں ہوگا because my file is the file that is being closed we don't need to tell it anything more دیکھیں پروسیس اس نے کیا کیا ہے my file.open جو تھا اس نے ایک ٹیکسٹ فائل جو دسک پہ موجود تھی اس کو کھولا اور جو ہمارا if stream type variable تھا جس کا نام تھا my file اس کو اس فائل کے ساتھ associate کر دیا now جب بھی ہم my file کو استعمال کریں گے وہ actually اس فائل کی manipulation ہو رہی ہوگی because this association has been created when we said my file.close تو یہ دسک والی فائل کلوز ہوکے دسک پہ سیب ہو جاتی اور my فائل جو ہے وہ فارق ہو جاتا ہے that is again an if stream type variable but it is no longer associated with any other file why don't you write a small little program جو آپ کی کسی ٹیکسٹ فائل کو جو دسک پہ آپ نے بنا کے سیب کی ہوئی ہے اس کو پڑے اور سکرین پہ دکھا دے اس کے اندر دو تین چیزوں کا آپ کو خیال رکھنا پڑے گا text file تو آپ نوٹ پیڑ میں کریئٹ کر لے وہ نوٹ پیڑ میں کریئٹ کر دیا my file.txt program میں آپ if stream type stream declare کریں call it my file my file.open کے ساتھ جو string دیں گے وہ ہوگا my file.txt اس کو کھولنا آپ نے جب آپ program چلائیں گے you may have some funny results you may have a box that kind of just disappears and maybe nothing happens so you need to do some error checking error checking files کے ساتھ جو ہے تعلق اس کا وہ اس طرح کہ ہے کہ جی ہم نے کہ my file.open فلانی فائل اور وہ نہیں کھولی نہ کھولنے کی کئی وجہ ہو سکتی ہے ایک ہے کہ جو وہ فائل وہاں existی نہیں کرتی دوسی ہے کسی اور program نیوز فائل کو کھولا ہوئے اور اس کو مکمل طور پر exclusive use کے لیے پہکر لیا تو کوئی اور program اس میں داخل نہیں ہو سکتا so there could be many reasons for that so it's a good idea whenever you say my file.open some file you should do an error check and the way to do an error check is if my file.open was successful تو my file کے اندر ایک فائل ہندل آگیا ہوگا اگر وہ successful نہیں ہے یعنی فائل نہیں کھول سکا تو you can just do if not my file so exclamation mark my file that means کہ جی it didn't work it returns a fault so if not my file do a little polite statement your file could not be opened and exit from the program so remember how to do error checking or learn how to do error checking when your opening files جب ایک فائل کھول گئی تو پھر اس کو آپ see in والے syntax کے ساتھ پڑھتے جائیں word for word اور اس کو output کرتے جائیں اور پھر end پر close کر لیں so do that experiment if you find repeatedly کہ جی آپ اپنے dev c++ کی environment میں فائل کھول نہیں سکتے جیک ہے so you should actually do an error message جو آکے سکرین پی آپ کو دکھا دے کے دی file not found your file open failed something like that then I will tell you what to do program کو کمپائل کریں گے تو اس کی executable بنتی ہے that is the exe file پہلے تو آپ locate کریں کہ وہ exe کس foldر میں پڑی ہوئی ہے it should be in your myprox folder جو آپ نے فائل بنائے تھی text file جس کو پرنا چاہے ہیں myfile.txt وہ بھی اسی foldر میں موجود ہونی چاہیے اب دک آپ کو command prompt پے جانا آگیا ہوگا آپ command prompt پے چلے جائیں myprox foldر میں چلے جائیں اور وہاں سے manualی تائپ کریں اپنے program کا نام اگر آپ وہاں پے تائپ کریں گے اور program اور text file ایک ہی foldر میں پڑے ہو تو پھر کھولنے میں کوئی problem نہیں ہوگا program file کو کھول سکے گا اور اس کے contents کو read کر سکے گا so try this out when you're doing this then the name of your text file need not be fully qualified it can be simply the name of the file within quotation marks to make life easy for yourself please make sure that you don't use special characters in the file name کوشیش یہ کریں کہ file کا نام سارہی lower case میں ہو اس میں پہلا والا حصہ ہو let's say my file پھر ایک full stop اور پھر txt extension ہو دو full stops نہ دا لیں بڑی بڑی strange چیزیں ہونے لگھ پڑتی ہیں commas نہ دا لیں etc. simple simple نام رکھیں تاکہ آپ کو یہ experience ہو سکے کہ یہ file کا نام رکھا ہے program میں اس کو کیسے call کی ہے program نے اس کو کھول لیا so far we were dealing with this first type of file which was input کیلیہ ہم استمال کر رہے تھے what about output output is slightly more interesting when we open a file for output there are several things we might want to do with it first thing is کہ جی open کریں اور وہ file اس وقت create ہو جائے so it's a brand new file اور پھر ہم اس میں کچھ لکھیں گے دوسرا ہے کہ جی file exist کرتی تھی اس کو کھولا جائے لیکن اس کو ہم overwrite کرنے لگیں لہذا اس میں جو original contents تے وہ سارے زایا کر دینے ہیں اور اس کو جو بھی لکھا جائے گا وہ نئے سرے سے لکھا جائے گا جب تاکہ اس file کو close نہیں کرتے ایک تیسا طریقہ بھی ہے کہ جی file کو کھولا جائے existing file کو اور اس کے اخیر پہ کچھ لکھا جائے جو چیز اس میں موجود تھی وہ وہی کی وہی رہے اور اس کے انڈ کے اوپر ہم append کر سکیں کچھ اور ٹیکست اور چاہتھا طریقہ جو ہے وہ ہے کہ جی file کھولا جائے اور کھولنے کے بعد ہم اس کو کہیں کہ جی اس میں جو دیتا تھا وہ تو موجود رہے لیکن ہم جہاں مرضی دل کرے لکھنے اس کے درمیان میں لکھنے اس کے انڈ میں لکھنے اس کے beginning میں لکھنے تو جانتا تھے جب ہم اپنے اوپر تاکر کے لاتھ لکھنے لگتے تو موجود رہا ہمیں ایک انڈ میں لکھنے لگتے تھا جانتا تھا کہ جی ہم نے فائل کا نام دیتا تو اتنا کافی ہے بہت ایک اپنیگ موڈ بھی دے رہے تھے یہ فائل کھولنی کیا موڈ کے اندر ہے ہے. So the correct syntax for fStream i fStream or o fStream اب میں جنرک بتا رہا ہوں آپ کو fStream کے ساتھ وہ ہوگا fStream اور پھر اس کے ساتھ جو بھی ویریبرل کا نام ہے ویریبرل نام کے ساتھ جو پرینتسیز ہیں پہلے فائل کا نام آتا ہے پھر کمہ اور ایک اس کا دوسرہ argument ہے وہ ہے mode which is the mode in which the file is to be opened. یہ mode کیا چیز ہے. Well it's basically an integer variable لیکن اس کی values predefined ہیں. So اگر آپ فائل کو پرنا چاہتے ہیں تو اس کا mode input file ہوگا اور وہ ایک ہیڈر فائل میں defined ہے جب آپ نے fStream اور standard IO وغیرہ include کی وہ modes include ہو گئے ہوئے ہیں. IO stream سے یہ شروع ہوتے ہیں وہاں سے IO system کے لاتے input output system وہاں پہ یہ defined ہیں. You don't need to worry about them at this time but you should know what they are and you should know how to use them. جب ہم streams کی actual discussion کریں گے پھر ان کے اوپر زیادہ بات ہوگی. For the moment if I want to open let's say an input file میں اس کو پرنا چاہتا ہوں تو میرا correct or complete syntax جو ہے وہ اس طرح کا ہوگا if stream my file پھر parentheses کے اندر double quotes کے اندر file کا نام comma mode کی جگہ پہ میں لکھوں گا IOS colon colon IN now colon کی بور پہ کریکٹر ہے دو نکتے اوپر نیچے لگے بے یہ کہتا ہے کہ جی my file جو ہے which is the variable of type if stream which is actually a stream object اس کو associate کرنا ہے with this file name جو ہم نے double quotes میں کیا let's say my file.txt اور اس کا opening mode جو ہے وہ in ہے input mode ہے اور اس کو لکھنے کا یہ طریقہ IOS colon colon IN یہ جو mode ہے یہ پھر OF stream ہی output files کے لیے اس کی کئی اور values آ جاتی ہے پہلے یہ آ جائے گا کہ جی ہم نے اگر plain simple output کرنا ہے تو IOS colon colon out let's take a look at some یہ آپ کے پاس پوری list ہم دکھا رہے ہیں take a look at the modes میں نے کہا کہ جی output کے لیے ہم out بھی کر سکتے ہیں out کا mode جو ہے وہ file کو یا create کر دے گا اگر file exist نہیں کرتی اور اگر کرتی ہے exist تو اس کو کھولے گا اور ساتھ ہی اس کے content ساری زائیہ ہو جائیں گے so it'll be a zero length file till you write something into it what if we want to append then the mode is IOS colon colon APP append to this file that means the file contents will remain intact file will be opened and whatever output you do to the file will be added to the end of the file any file بڑی ہوتی جائے گی what about that thing about reading and writing anywhere for the moment we are working with text files we will not do any random movement but there is a mode for output which is IOS colon colon at E this is at end ATE اس کو اتنا کہیں گے at E کہیں گے تو سمجھ آ جاتی ہے کہ یہ at end so you have opened a file for writing and you have positioned your cursor or let's say the file position at the end of the file and you can write over there it is like append but at E کے ساتھ جو فائل کھولی ہوئی ہے اس میں آپ لکھ کہیں پہ بھی سکتے ہیں append میں صرف اخیر پہ لکھ سکتے ہیں if you say truncate so IOS colon colon trunc then it is the same as just truncating the file like IOS colon colon out so OF string i.e. output file string کے ساتھ جو آپ اوپجیکسٹیٹ کرتے ہیں اس کے ساتھ کئی different modes ہیں normally IOS colon colon out ہی استعمال کر رہے ہو گے کیونکہ ہم ایک فائل پڑیں گے سیمپل کام کرتے ہیں اور ایک فائل لکھیں گے and that will be a new file what we want to do now is write a few programs and experiment with the file system پہلی چیز یہ ہے کہ ہم فائل کو پڑنا شروع ہو گئے ہیں ہمیں کیسے پتہ چلے گا جی فائل ختم ہو گئی ہے there is a simple function call which is EOF EOF is end of file اگر ہمارے پاس if stream تھی my file so if we say my file dot EOF اور آگے کیونکہ function call ہے parentheses آئیں گے so this is like a test کیا یہ فائل ختم ہو گئی ہے so you can use it in a while statement وائل not my file dot EOF parentheses جب تک یہ فائل ختم نہیں ہوتی یہ کرتے رہو اور اس کے بعد you can say my file greater than variable name سو it will keep on reading from the file and putting the data into a variable do with it whatever you want till such time as the file finishes in which case the my file dot EOF function will return true the while loop will exit and you should do a my file dot close so EOF is a very very useful function اس کے علاوہ well using the greater than greater than sign is convenient but it's not very useful in many many different situations so we have several other ways of reading a file the first one that we can use is the get function so if I say my file dot get what that does is it returns a single character so you should have a character variable not a string a simple character variable let's call it ch so up in the program you would have declared char ch what you do is my file dot get and within parentheses you say ch so file say next character جو ہے ایک character جو ch کے اندر اسائن ہو جائے گا and then you can use it so a very simple program that reads a file and outputs it to the screen character by character would be something like while not my file dot EOF my file dot get ch ch out less than less than ch ایک ایک character پڑھتا جائے گا and throw it on the screen and you can read the entire file try it out and make sure it works what is the difference between using the get function and the see in type of syntax with the greater than greater than sign that we were using before major difference یہ ہے کہ یہ new lines کو بھی as a character پڑھ رہا ہے اگر آپ کی فائل کے اندر کئی لائنے ہیں تو output کے وقت بھی وہ آپ کو کئی لائنے ہی نظرائیں گی on the other hand اگر آپ وہ stream extraction operator استعمال کر رہے ہو تے کہ جی my file greater than greater than variable name تو پھر new line آپ کو خود دا لی پڑھتی in this case there is no need you can just run this little loop and it will read the file character by character and echo it to the screen exactly the way it was typed so try it out next one would be کہ جی اس فائل کو پڑھا جائے or اس فائل میں لکھ دیا جائے تو how about کہ اگر ہمار پاس get ہے تو why not have a port the answer is yes you do have a port so you can use output file dot port where output file is an OF stream type of stream output file stream ہے so you can have a program that opens two files at a time one is IF stream جہاں سے ہم پڑیں گے and the other one is of type OF stream جہاں ہم لکھیں گے IF stream بالی سے ہم get کرتے ہیں character or OF stream کے اندر ہم put کرتے جاتے ہیں the other way وہ بھی چل سکتا ہے کہ آپ کہتے ہیں کہ my input file اس سے ڈرنکارہ اور ویریبل میں لے جاو or my output file کمدر لس than استعمال کر کے ویریبل دال دیں تو وہ فائل میں لکھا جائے گا so exactly like seen and see out you can use input and output files on the other hand if you want to do an exact copy without making any mistakes ہمیار پہلیے دییکئے دیکلیر کرتے تھے ہماری پاس دو آپشن تھیں کے جی پہلے ویریبل کو دیکلیر کیا جائے پھر ایک ارسانمن سٹیٹمنٹ سے اس کوانیشلیز کیا جائے یہاں پر بھی تقرباہن وہ ہی ہو رہا ہے کہ ہم پہلے کہتے ہیں جہاں کہتے ہیں جہاں ہم کہتے ہیں ofstream myoutput file اور پھر ہم جاکے کہتے ہیں کہ my file یا myoutput file.open تو کیا ہم دیکلیر کرتے وقت ہی فائل کھول سکتے ہیں؟ آنسر is yes exactly the same way. We say ifstream my input file parenthesis quotation marks میں فائل کا نام دے دیں Can we do something else with opening the file? آنسر is yes دیکھیں جب ہم ARM variables کو استمال کرتے تھے We said int i اور پھر آگے جاکے کہتے تھے i equal to 0 In other words we declared the variable at a certain place And then we initialized it to a certain value But we could also have said int i equal 0 semicolon You need the variable was declared and initialized at one go We can do the same with the file اگر میں ایک فائل کھول نہیں ہے for input I can simply state ifstream my input file parenthesis کے اندر name of the file within quotation marks as a string This is the same as saying later my file.open یہ ایک ہی لین کے اندر آپ نے کام کر لیا ہے Same thing applies to output files You can say o f stream my output file parenthesis کے اندر quotation marks میں نام اور پھر اس کام موڈ ios colon colon out یا ios colon colon app or whatever you want to do with it So you can use that within the declaration line یہ شوٹ ہند ہے But عام طور پہ ہم Files کو explicitly کھولتے ہیں With the .open function Or explicitly ان کو بن کرتے ہیں With the .close function That is also a good programming habit Explicitly open کرنے کا ایک اور بھی فائدہ ہے کہ جی if stream تو آپ نے ایک اسٹرین ویریبردیکلیر کیا ہے اسٹرین تایب آبجیکت ہے انپٹ کے لیے تو اس سے پہلے آپ ایک فائل کھول لیں یہ اس فائل کو پروسس کیا بند کیا کوئی اور فائل کھول لیں اور اسی ویریبرد کے ساتھ ایسوشیٹ کر لیں And so on so forth جب آپ دیکلیریشن میں یہ کرتے ہیں تو آپ کو لیمٹنگ آپ سیل پہنسیں گی یہ فائل کھلی ہوئی ہے یہ پورے پروگرم میں کھولی رہے گی So try with the different variants of these statements Now we know a few things about file streams We know we can use the stream insertion and the stream extraction operators وہی جن کو ہم greater than greater than میں کہتا رہا ہوں یا less than less than کہتا رہا ہوں لیے see in see out type of input output اس کے ساتھ ہم character input output بھی کر سکتے ہیں which is the same as get char and put char but in the case of file streams we say output file stream dot port یا input file stream dot get اور ان دونوں میں آگے see آجاتا ہے which is a character variable اور ایک character فائل سے پڑھ کے اس میں لکھا جاتا ہے یہ ایک character جو ہے یہاں سے اٹھا کے file کے اندر لکھ دیا جاتا ہے How about reading a full line of text Can we do that see in تو آپ کو یادہ نا ایک word لیتا تھا یعنی ایک token لیتا تھا Why did I use the word token because یاد ہوگا پچھلے لیکچر میں ہم نے strtok function کی بات کی تھی جو کہ ایک لائن میں سے tokens extract کرکے return کرتا تھا وہی یہاں پہیے use وہ لاتا ہے Instead of reading a file a character at a time or a word at a time with see in would do How about reading it a whole line at a time اس میں کوئی فائدہ ہے فائدہ جو ہے نا وہ ایک efficiency کے حوالے سے آتا ہے So again I'm not advocating that you sacrifice clarity for efficiency but I'm giving you an alternative When you're reading something from a disk or when you're writing to a disk hard disk آپ کی جو کمپیوٹر میں ہے یہ electromechanical device ہے arguably this is the slowest thing in the computer آپ کا microprocessor آپ کی memory microprocessor کے اندر register these are all chips کے اندر electronics They run at آج کل کی جو ایک gigahertz او دو gigahertz فالی سپید ہے اس پر چلتے ہیں اگر آپ hard disk کی بات کریں تو ہم بات کر رہے ہوتے ہیں کہ جی hard disk کا average access time جو ہے وہ ساتھ ملیسیکنس ہے یعنی a very fast modern day hard disk would have an average access time of seven milliseconds which means randomly اس کو کہیں کہ جی ہاں سے دیتا پڑ دو تو ساتھ ملیسیکنس جنی seven thousandth of a second وہ لیگا اس کو دیتا پڑھنے کے لیے یہ thousandth of a second ہے او در وہ gigahertz پے چل رہا ہے which is a thousand million cycles per second the processor and the RAM are much much faster than your hard disk اب اگر پڑھنے لکھنے کے لیے ہم کہیں جی ایک character پڑھو پھر دوسرہ پڑھو پھر تیسرہ پڑھو we're asking for I'm not saying is every time it's seven milliseconds but we're talking of time on the order of milliseconds to read that file or read a single character آج کل کی بفرنگ بھی آجاتی ہے disks work very efficiently and they work faster so it's not as bad as that but nonetheless because the disk is an electromechanical device it is very very wasteful to read and write it character at a time so we would like to read it in bigger chunks any 64 کے ایک اٹھا پڑھنے yeah 256 کے ایک اٹھا پڑھ لیا جائے اسی درہ واپس لکھ دیا جائے usually our operating systems ہیں وہ تو ہمارے لیے buffering کر رہے ہوتے ہیں اور یہ کام وہ کرتے ہیں to make things a little bit more efficient but ہمارے آج کی دیسکشن کے لیے ہم یہی کہتے ہیں کہ جی ان سٹر of reading character by character or word by word perhaps it would be more efficient if we could read line by line اس کے لیے بھی function ہے جو یہ f stream class کے اندر موجود ہے وہ ہے get line function when we use the get line function the syntax is as follows we use our file handle the if stream object so we say my file dot get line اب اس کے اندر تین argument جاتے ہیں پہلہ argument is a character array and the array should be big enough to hold one full line of text so the first one is a character array string the next one is the number of characters maximum that we expect to read number three the third one is a character اگر ہم کہی پر رکنا چاہے تو ہم کہتے ہیں کہ جی ہم input میں لکھا ہے hello world لیکن ہم چاہتے ہیں کہ جی world نہ get کیا جائے تو ہم get line میں کر سکتے ہیں کہ جی my file dot get line array کا نام comma twenty comma single character capital W ہوگا کیا کہ hello world پڑھتے پہو جب capital W پی آگا world کے W پے تو وہاں پہ کٹھ کے assignment ہو جائے گی normally we don't use the third one we let it run to the maximum and the default is new line which means get line function جو ہے وہ ایک پوری line پڑے گا up to the new line character but the new line character would not be read اور جو بھی line وہاں سے ملتی ہمے characters کی وہ array کے اندر store ہو جائے گی so again it is our responsibility to make sure that the array is large enough to hold the entire line and then we can do with it whatever we want so it will be placed in the array so using get line repeatedly is a much more efficient way of reading the file rather than using a get function if we've gotten a line now for example immediately آپ یہ کر سکتے ہیں کہ یہ آپ نے لیے ایک چھوٹا سا دو لائنوں کا program لکھیں جو کہ while not my file.eof کر کے loop چلائے کہ جی get line سے array پڑی اور اس کو see out سے screen پہ display کر دیا the result would be the same as using the get and see out فرق یہ ہے کہ آپ نیو لائن آپ کو خود دالنی پڑے گی ch your get فلہ فنکشن تھا وہ تو نیو لائن file سے ہی پڑھکی screen پہ لجا رہا تھا یہاں پہ نہیں لجائے گا آپ نیو لائن اپنے طور پہ خود دالیں گے but nonetheless if you can think of creating a very huge file you will notice that there is a difference in speed get line works faster than reading it character by character لائن میں پورا دیتا آگیا اب اس کو توڑ کے ہم نے کچھ کرنا ہے کہ جی suppose file وہی تھی جہاں سے آج کے لیکچر کی بات شروع ہوئی کہ جی پیرول بنانا تھا اور ہر لائن پہ ہم نے ایک امپلوی کا نام لکھا ہوئے let's for the moment assume it's a single word اور ساتھ اس کے اس کی سیلری دیوئے amount in amount per month that he earns how do we break this line up well we have a function for this purpose وہ function ہم نے پچھلے لیکچر میں پڑھا تھا it's a string handling function and that is S-T-R-T-O-K string token function جو ہے وہ ایک string لیتا ہے اور ساتھ آپ اس کو ایک delimiter بتاتے ہیں کہ یہ token کے درمیان کیا چیز آئی گی delimiter is normally a single character so suppose ہماری فائل کے اندر نام لکھا ہوئے امپلوی کا ساتھ اس کے پیرول کا مطلب سیلری دیتہ لکھا ہوئے درمیان میں ایک single space ہے so I can use the string token function call it repeatedly and say let's say ایک character string کو ایسائن کر دیتے ہیں پہلے کہ یہ نام جو ہے string token جو get line سے ہم نے string لیتی ارے کے اندر وہ string token کا پہلہ argument بنے گی پھر ہم کہتے ہیں single character اس کو دیدو as a delimiter so string token function جو ہے وہ سب سے پہلے امپلوی کا نام return کرے گا second call to the string token function کے اندر یہ تھوڑسا ٹرکی ہے جو پہلہ argument ہے جہاں پہ array کا نام لکھا ہوا تھا جہاں پہ ہم نے get line سے دیتہ دالا تھا اب وہاں array کا نام نہیں آئے گا وہاں پہ نلک آئے گا n, u, l, l capitals میں لکھا ہوا لکھا چلائے چلو next token پکڑو next token جو پکڑا جائے گا وہ sellery ہوگی لیکن remember sellery جو ہوگی وہ character string کے طور پہ آپ کو ملے گی so now character string سے ہم amount کیسے بنائیں؟ well you know we had the a to f function or the a to i function which says as key to float we have as key to integer so اب دیکھیں آپ aista aista aista یہ functions استعمال ہونے شروع ہو رہیں ہم نے get line کیا string token کی repeated calls کے ساتھ ہم نے name علیادہ کیا and salary علیادہ کی salary کیونکہ as a character string ہمیں ملی ہے اس کو ہم نے let's say a to f کے ساتھ اس کو ایک double variable میں convert کر لیا اور پھر next get line کر لی so now we are using many many functions یہ program آپ کے hand out کے اندر بھی آپ کو دیا ہوا ہے take a look at it create your own little payroll file for the moment you can use single word names and then the salary in front of it and then try to print it out on the screen do that as an exercise we have many more exciting exercises for you as part of your assignments one is a good one جو آپ کریں گے تو I will say you've become real programmers by this stage so what have we done today what we have done is we've started the rudiments of file processing using c and c plus plus I'll say rudiments کیوں کہ ابھی beginning کا کام ہے اور ابھی ہم نے صرف text file استعمال کی ہیں اور اس کے اندر ہم نے simple see input کی ہے very very simple see output کی ہے میں نے زیادہ اس پر بات نہیں کی آگے چل کے ہم نے تھوڑسی complex output کی بات کرنی ہے formatting کی بات کرنی ہے and in particular random files کی بات کرنی ہے کہ یہ والا یہاں سے پڑھو حصہ یہ والا یہاں پڑھو یہاں پہ لکھتو jumping all around آج جو ہم کام کر رہے تھے وہ text files کے ساتھ تھا by and large ہم ان کو sequentially استعمال کرتے ہیں which is almost like your videotape your audiotape کہ جی شروع سے شروع ہوتا ہے اور پھر ہر چیز درمیان والی سن کے یا دیکھ کے پھر ہم اخیب تک پہنچ دیں ہیں so we have to process it sequentially we have not touched random files yet we will do that next time and they are even more exciting till that time اجازت دیجے خدا حافظ