1. مهمان گرامی، جهت ارسال پست، دانلود و سایر امکانات ویژه کاربران عضو، ثبت نام کنید.
    بستن اطلاعیه

آموزش پاسکال بخش ششم : آموزش فایل پردازی در پاسکال

شروع موضوع توسط hector2141 ‏15/10/12 در انجمن Pascal

  1. کاربر ارشد

    تاریخ عضویت:
    ‏6/9/12
    ارسال ها:
    14,323
    تشکر شده:
    2,698
    امتیاز دستاورد:
    0
    حرفه:
    daneshjo
    [​IMG]
    فایل های متن ، فایل های داده و فایل های خروجی:

    یک فایل متن مجموعه ای از کاراکتر ها است که تحت یک نام روی دیسک ذخیره می شود . می توانید کلیه داده هایی که توسط برنامه مورد پردازش قرار می گیرند را قبل از اجرای برنامه ، در یک فایل متن ذخیره کنید . سپس به برنامه دستور خواندن داده ها را از فایل متن به جای صفحه کلید بدهید .
    فایل داده:
    یک فایل داده (یا فایل ورودی ) فایلی است که شامل اطلاعات ورودی برنامه است یک فایل داده می تواند از نوع متن دودویی باشد .


    مزایای فایل داده ها :
    یکی از مزایای فایل های داده این است که می توان آن ها را با استفاده از ویراستار برنامه(یا واژه پرداز)بازیابی کرد و قبل از اینکه فایل ، توسط برنامه پردازش شود خطاهای آن را اصلاح کرد . مزیت دیگر آنها این است که می توانند چندین بار توسط برنامه خوانده شوند .این خاصیت ،اشکال زدایی را آسان می کند. همچنین می توان نتایج برنامه را به جای صفحه کلید در یک متن ،نوشت .
    ساختار اطلاعات در یک فایل متن:
    یک فایل متن می تواند توسط یک ویراستار ،ایجاد و ذخیره شود هر کاراکتری که تایپ می شود به طور موقت در حافظه اصلی قرار می گیرد و روی صفحه ، نمایش داده می شود . وقتی فایلی ذخیره می کنید ، اطلاعات روی صفحه نمایش ، به صورت رشته ای از کاراکتر ها روی دیسک ذخیره می شوند .
    ساختار منطقی یک فایل متن:
    از نظر منطقی فایل متن شامل خطوطی از کاراکتر ها است که این خطوط توسط کاراکتر< eoln > از یکدیگر جدا می شوند . با استفاده از یک ویراستار یا یک فرمان سیستم عامل (نظیر فرمان زیر ) می توان یک فایل متن را روی صفحه نمایش مشاهده کرد.
    > type filename
    خواندن اطلاعات از فایل متن:
    می توان از رویه readln برای خواندن داده از یک فایل متن استفاده کرد. برنامه ای در نظر بگیرید که شامل تعریف متغیرهای زیر است :
    Var
    Salary : real ; { input – a salary }
    First . last ; char; { input – initials }
    Separator : char ; { input – blank between salary and first }
    Mydata :Text ; { a text file used as data file }
    عبارت :
    Readln ( mydata, Salary, Separator , First, last )
    رویه read :
    رویه ورودی دیگر ، رویه read است که کار آن نیز خواندن اطلاعات از صفحه کلید یا فایل است . بر خلاف readln ، رویه read تنها کاراکتر های داده ای که در لیست ورودی اش مشخص شده را می خواند.
    مثال :
    دستورات :
    Read ( mydata , salary ); { read salary from mydata }
    Read ( mydata , separator ) { read the balank character }
    Read ( mydata , first , last ) { read initials from mydata }
    Readln ( mydata ) { skip past < eoln > character in mydata }
    نتیجه یکسانی با دستور زیر دارند.
    Readln ( mydata , salary , separator , first , last )
    نوشتن نتایج در فایل متن :
    برای نوشتن نتایج در فایل های متن از رویه های write و writeln استفاده می کنیم .این رویه ها درست مانند همان رویه های چاپ نتایج روی صفحه نمایش هستند اگر اولین پارامتر در فراخوانی write یا writeln ، متغیری از نوع text باشد خروجی به جای صفحه نمایش به فایل فرستاده می شود .
    رویه های write , writeln :
    شكل استفاده :
    Write ( outfile , output list )
    Writeln ( outfile , output list )
    مثال :
    Write ( myresult , salary )
    Writeln ( myresult , hours : 3 :1 , ‘ s’ , salary :4 :2 )
    نامهای داخلی و خارجی فایل:
    برای اینکه پاسكال قادر به بازیابی یك فایل ذخیره شده روی دیسك باشد ، باید نام دایركتوری دیسك كه فایل در آنجا قرار می گیرد را داشته باشید.
    رویه Reset :
    شكل استفاده :
    Reset ( infile )
    مثال :
    Reset ( mydata )
    فایل mydata را به عنوان ورودی برنامه آماده می كندو نشانگر موقعیت فایل نیز به ابتدای فایل منتقل می شود. نشانگر موقعیت فایل همواره به كاراكتر بعدی كه قرار است پردازش شود ، اشاره می كند.بعد از عمل reset ، كاراكتری كه خوانده می شود ، اولین كاراكتر فایل است.

    نکته :

    عمل reset قبل از اینكه كاراكتری از فایل mydata خوانده شود ، انجام می گیرد و اگر فایل mydata قبلاروی دیسك ذخیره نشده باشد ، این عمل ناموفق است ، برای خواندن و پردازش فایل در بار دوم و در همان برنامه ، عمل reset باید انجام شود.
    رویه rewrite :
    شكل استفاده :
    Rewrite ( outfile )
    مثال :
    Rewrite( outdata )
    فایل outdata را برای خروجی آماده می كند .این فایل در ابتدا خالی است.كلیه داده هایی كه قبلا در فایل outdata ذخیره شده اند، از بین می روند.
    تست انتهای فایل : تابع EOF :
    شكل استفاده :
    EOF( filename ) ​
    مثال :
    EOF( infile )​
    تمام فایل ها به طور اتوماتیك با كاراكتر< eof > خاتمه می یابند.و تابع از پیش ساخته شده EOF در پاسكال (مخفف ENDOF FILE ׂ( تست می كند كه آیا كاراكتر بعدی فایل eof است یا خیر؟

    نکته :

    در صورتی كه كلیه كاراكتر های فایل infile پردازش شده باشند (یعنی كاراكتر بعدی ، كاراكتر < eof > باشد)، true را بر می گرداند و اگر هنوز کاراکتر هایی برای خواندن وجود داشته باشند false را بر می گرداند .
    تست انتهای خط : تابع EOLN :
    شكل استفاده :
    EOLN ( filename )​
    مثال :
    EOLN ( infile )​
    پاسکال تابعی به نام EOLN ( END OF LINE )دارد که قادر به تشخیص کاراکتر < eoln > است. در صورتی که کاراکتر بعدی < eoln > باشد , تابع EOLN مقدار true و در غیر این صورت false را بر می گرداند.
    نکته :
    اگر کاراکتر بعدی فایل , < eoln > باشد ,نتیجه تابع true و در غیر این صورت false خواهد بود .
    اگر file name حذف شود ,فایل سیستم input (صفحه کلید ) ، فایل ورودی است. در پاسکال استاندارد , فراخوانی تابع EOLN در صورتی که EOF( filename ) ، True باشد ،خطا است.
    استفاده از فایل های متن:
    اگر برنامه خروجی خود را به جای صفحه نمایش روی دیسک بنویسد ، برنامه دیگری می تواند از این خروجی به عنوان یک فایل داده استفاده کند . در حقیقت دو برنامه از طریق یک فایل دیسک با یک دیگر ارتباط برقرار می کنند.
    Assign ( ):
    این تابع شناسه فایل را به فایل خارجی منسوب می کند در اگر فایل وجود نداشته باشد آن را می سازد.
    نحوه کاربرد:
    Assign( my_file,external_name ) ;
    بستن فایل=close ( ) ​
    این تابع برای بستن فایل می باشد.
    نکته:
    اگر قبل از خاتمه برنامه تمامی فایل ها را نبندید ،هیچ کدام از اعمالی که بر فایل اعمال نموده اید ،اجرا نخواهد شد.
    قبل از این که بتوانید بین عملیات ها سوئیچ کنید، باید فایل را ببندید، به عنوان نمونه ،بعد از نوشتن اقلامی در فایل، باید آن را ببندید و مجددا قبل
    ازخواندن اقلام دوباره آن را باز کنید.
    نحوه کاربرد:
    Close( file_name ) ;​
    دستیابی تصادفی به فایل ها-seek ( ):
    پاسکال روشی را برای دستیابی به فایل ها ارائه می کند که به آن دستیابی تصادفی می گویند. دستیابی تصادفی اجازه می دهد تا قلم داده خاصی از فایل را که می خواهید پردازش کنید، با مشخص کردن موقعیت آن، انتخاب کنید.

    نحوه کاربرد:
    Seek( file_name,positio_number ) ; ​
    حال چند مثال جالب از فایل ها را حل میکنیم:

    مثال1.برنامه ای بنویسید که نام،تاریخ تولد، شماره تلفن فردی را گرفته و در فایلی ذخیره کند؟
    Program file_ex ;
    Uses wincrt ;
    Type rec_type=record
    Name:string ;
    Date_of_brith:string ;
    Telephone_number:string ;
    End ;
    Var
    My_file:file of rec_type ;
    Rec_var: rec_type ;
    Ch:char ;
    Begin
    Clrscr ;
    Assign( my_file,'file_1.dat ' ) ;
    Rewrite ( my_file ) ;
    Repeat
    Write( 'enter a name: ' ) ;
    Readln( rec_var.name ) ;
    Write( 'enter a date of brith: ' ) ;
    Readln( rec_var.date_of_brith ) ;
    Write( 'enter a telephone number: ' ) ;
    Readln( rec_var.telephone_number ) ;
    Write( my_file,rec_var ) ;
    Write( 'continue? Reply y/n: ' ) ;
    Readln( ch ) ;
    Until ( ch='n') or(ch='N ' );
    Close( my_file ) ;
    End . ​
    مثال 2. برنامه بالا را برای افزودن رکورد جدید تغییر دهید؟
    Program file_ex ;
    Uses wincrt ;
    Type rec_type=record
    Name:string ;
    Date_of_brith:string ;
    Telephone_number:string ;
    End ;
    Var
    My_file:file of rec_type ;
    Rec_var: rec_type ;
    Ch:char ;
    Begin
    Clrscr ;
    Assign( my_file,'file_1.dat ' ) ;
    Reset ( my_file ) ;
    Seek( my_file,filesize( my_file) ) ;
    Write ( 'enter a name: ' ) ;
    Readln( rec_var.name ) ;
    Write( 'enter a date of brith: ' ) ;
    Readln( rec_var.date_of_brith ) ;
    Write( 'enter a telephone number: ' ) ;
    Readln( rec_var.telephone_number ) ;
    Write( my_file,rec_var ) ;
    Close( my_file ) ;
    End . ​
    مثال3. برنامه ای کامل برای جستجوی قلم داده ای خاص در درون فایل بنویسید؟
    Program file_ex ;
    Uses wincrt ;
    Type rec_type=record
    Name:string ;
    Date_of_brith:string ;
    Telephone_number:string ;
    End ;
    Var
    My_file:file of rec_type ;
    Rec_var: rec_type ;
    Sought_name: string ;
    Found:Boolean ;
    Found_ind, counter:integer ;
    Begin
    Clrscr ;
    Assign (my_file,'file_1.dat ' ) ;
    Reset ( my_file ) ;
    Counter:=0 ;
    Write ( 'enter a name to be Found : ' ) ;
    Readln (Sought_name ) ;
    Repeat
    Seek( my_file,counter) ;
    Read(my_file,rec_var ) ;
    Found:=rec_var.name= Sought_name ;
    If Found then