فایها
اطلاعات مورد نیاز برنامه، از صفحه کلید خوانده شده و در متغرها،آرایه ها،رکوردها و آرایه ای از رکوردها ذخیره می شوند.
حجم اطلاعات زیاد، همواره در آرایه و بخصوص در آریه ای از رکوردها ذخیره می شوند. مثلا اطلاعات کامل مربوط به 100 دانشجو، در آرایه ا از رکورد ها به طول 100 ذخیره می گردد.
چون آرایه ها در حافظه RAM قرار دارند، با پایان اجرای برنامه، تمام اطلاعاتی که وارد آرایه شده بودند از بین می روندو دفعه بعد که برنامه را اجرا می کنید، باید دوباره اطلاعات را وارد کنید. این کار برای اطلاعات کم شکلی را ایجاد نمی کند ولی وقتی حرف از 100 یا 1000 نفر از دانشجو به میان میاد چی؟
پس باید راه حلی پیدا کنیم تا از ورود مکرر داده ها جلوگیری کنیم و وقتی که طلاعات وارد برنامه شدند، بتونیم چند بار از آنها استفاده کنیم.
برای این کار، اطلاعت وارد شده باید بر روی دیسک ذخیره شوند. اطلاعات بر روی دیسک، تحت عنوان فایل ذخیره می شوند. یعنی همانطور که برای ذخیره اطلاعات زیاد در حافظه RAM از آرایه استفاده می کنیم، برای ذخیره اطلاعات بر روی دیسک از فایل استفاده می کنیم.
هر فایل دارای نامی است که می توان از طریق آن، به آن فایل مراجعه کرد. نام فایل متشکل از حروف AتاZ و ارقام 0 تا 9 و از دو بخش تشکیلل شده است که با نقطه ای از هم جدا می شوند و عبارتند از:
1. پسوند فایل (بخش سمت راست نقطه، که حداکثر 3حرفی است.)
2. نام فایل (بخش سمت چپ نقطه، که حداکثر 8 حرفی است.)
مثال: first.dat
برای ذخیره اطلاعات بر روی دیسک، برنامه باید فایلی را باز کند و اطلاعات خوانده شده از صفحه کلید را در آن ذخیره کند.
فایل خروجی: فایلی را که برنامه باز می کند تا اطلاعاتی را ذخیره کند، آن فایل را خروجی گویند.
فایل ورودی: وقتی فایلی باز شده و اطلاعاتی را برنامه از آن فایل می خواند، آن فایل را ورودی گویند.
فایل ورودی-خروجی: فایلی را که بتوان بر روی آن عمل خولندن و نوشتن را انجام داد، فایل ورودی-خروجی گویند.
انواع فایلها در پاسکال
فایلها در پاسکال از نظر نوع ذخیره اطلاعات به دو دسته تقسیم می شوند:
1. فایلهای متنی (text)
2. فایلهای باینری (binary)
فایلهای متنی،فایلهایی هستند که محتویات آنها بصورت کاراکتری می باشد.یعنی هر اطلاعاتی که د این فایلها قرار می گیرد، به صورت کاراکتری ذخیره می شود.
مثال: 125 به این صورت ذخیره می شود: به صورت کاراکترهای '1'و'2'و'5' ذخیره می شوند.
فایلهای باینری: فایلهایی هستند که داده های دیگری مثل اعداد صحیح،اعشاری و رکوردها را ذخیره می کنند.
نکته: محتویات فایلهای متنی مثل محتویات صفحه نمایش و محتویات فایلهای باینری مثل حافظه RAM است.
سازمان فایل: قانون حاکم بر نحوه ذخیره و بازیابی اطلاعات در فایل را سازمان فایل گویند.
نکته: صدها نوع سازمان فایل وجود دارند که در اینجافقط دو نوع سازمان فایل مورد بررسی است که عبارتند از : سازمان رتیبی و سازمان تصادفی(دستیابی مستقیم)
سازمان ترتیبی: اطلاعات به ترتیبی که در فایلها قرار دارند، بازیابی می شوند.
سازمان تصادفی: ترتیب دستیابی به اطلاعات ربطی به ترتیب ذخیره آنها ندارد و در هر جایی از فایل می توان اطلاعاتی را ذخیره کرد و اطلاعات مورد نیاز را از هر جایی از فایل و به هر صورتی می توان خواند.
فایهای متنی
فایلهای متنی را می توان از طریق برنامه یا از طریق ویراستارها ایجاد کرد.
هر کاراکتری که تایپ می شود، به طور موقت در حافظه قرار می گیرد و در صفحه نمایش ظاهر می شود.
وقتی فایل ذخیره می شود اطلاعاتی که در صفحه نمایش بودند به صورت رشته ای از کاراکترها بر روی دیسک ذخیره می شوند.

فایل شکل بالا از 27 بایت (کاراکتر) تشکیل شده است. (با احتساب کاراکترها،ارقام،نقطه،فضای خالی و دو کاراکتر خاص <eof> و <eoln> .
در فایل متنی، کاراکتر <eoln> (کاراکتر انتهای خط)(end of line) وقتی ظاهر می شود که کلید Enter فشار داده شود.
وتی فایل ذخیره می گردد کاراکتر <eof> (کاراکتر انتهای فایل)(end of file) به طور خودکار در انتهای فایل قرار می گیرد.
نکته: در هر فایل متنی ممکن است چند کاراکتر پایان خط وجود داشته باشد، ولی فقط یک کارکتر پایان فایل وجود دارد.
نکته:فایل متنی از نظر فیزیکی، به صورت رشته ای طولانی از کاراکترها بر روی دیسک ذخیره می شوند، از نظر منطقی، مجموعه ای از کاراکترهاست که متشکل از چندین خط است و هر خط به <eoln> ختم می شود.
انتخاب نام فایل متنی و باز کردن آن
برای ایجاد فایل متنی و یا استفادهاز فایل موجود، باید مقدماتی را انجام داد که عبارتنداز:
1. انتخاب متغیر فایل و تعیین نوع متنی برای آن.
برای این کار به این صورت عمل می کنیم:
<-- Iran Universities Software Students [elibom.ir] -->
<-- Start Code -->
var نام متغير فايل: text;
<-- End Code -->
<-- Birjand University Software Students [buss.ir] -->
نامگذاری متغیر فایل، مانند نامگذاری متغیرهای معمولی انجام می شود.
مثال: دستور زیر متغیر فایلی به نام first را ایجاد میکند.
<-- Iran Universities Software Students [elibom.ir] -->
<-- Start Code -->
var first: text;
<-- End Code -->
<-- Birjand University Software Students [buss.ir] -->
2. انتساب متغیر فایل، به فایلی بر روی دیسک.
چون فایل باید بر روی دیسک ذخیره شود و یا از روی دیسک خوانده شود، باید بر روی دیسک نیز برای آن نامی انتخاب کرد.
برای این منظور از دستور assign به صورت زیر استفاده می شود:
<-- Iran Universities Software Students [elibom.ir] -->
<-- Start Code -->
assign (متغير فايل',نام فايل');
<-- End Code -->
<-- Birjand University Software Students [buss.ir] -->
در این دستور،متغیر فایل، قبلا تعریف شده است و نام فایل، نامی است که بر روی دیسک ایجاد خواهد شد.
مثال: دستور زیر، متغیر فایل first را به فایل INDAT.DAT در درایور A نسبت می دهد.
<-- Iran Universities Software Students [elibom.ir] -->
<-- Start Code -->
assign (first,'A:\INDAT');
<-- End Code -->
<-- Birjand University Software Students [buss.ir] -->
3. باز کردن فایل متنی
قبل از اینکه برنامه بتواند از فایلی استفاده کند، باید آن فایل را باز کند. برای باز کردن فایل از چند دستور استفاده می شودکه عبارتند از: append,rewrite,reset
دستور reset
این دستور برای باز کردن فایلی که قبلا بر روی دیسک وجود داشته است، به کار می رود.
فایل را با این دستور باز می کنیم و اطلاعات را از آن می خوانیم. بنابراین، قبل از خواندن کاراکتری از فایل،باید دستور reset اجرا شود.
اگر فایلی را که قبلا بر روی دیسک وجود نداشته باشد و بخواهیم با این دستور آنرا باز کنیم، کاری انجام نمی شود.
بطور کلی، می توان گفت که دستور reset فایل را در حالت ورودی باز می کند.
نحوه کاربرد دستور reset به صورت زیر است:
<-- Iran Universities Software Students [elibom.ir] -->
<-- Start Code -->
reset (متغير فايل);
<-- End Code -->
<-- Birjand University Software Students [buss.ir] -->
دستور reset با متغیر فایل سروکار دارد و از طریق آن به فایل دیسک مراجعه می کند.
مثال: دستور زیر فایل first را باز می کند:
<-- Iran Universities Software Students [elibom.ir] -->
<-- Start Code -->
reset (first);
<-- End Code -->
<-- Birjand University Software Students [buss.ir] -->
اگر فایلی که باید با این دستور باز شود، وجود نداشته باشد، پیام خطایی صادر می شود.
چنانچه فایلی باز شود و این دستور بر روی آن اجرا گردد،فایل ابتدا بسته و دوباره باز می شود.
دستور rewrite
این دستور نیز برای باز کردن فایل مورد استفاده قرار می گیرد و فایل را طوری باز می کند که می توان اطلاعاتی را در آن نوشت. اگر فایلی که rewrite می خواهد آنرا باز کند، قبلا وجود نداشته باشد، آنرا ایجاد می کند. ولی اگر وجود داشته باشد، اطلاعات قبلی آن را از بین می برد و آنرا برای دریافت اطلاعات جدید آماده می کند. به طور کلی، این دستور فایل را در حالت خروجی باز می کند.
این دستور به صورت زیر به کار می رود:
<-- Iran Universities Software Students [elibom.ir] -->
<-- Start Code -->
rewrite (متغیر فایل);
<-- End Code -->
<-- Birjand University Software Students [buss.ir] -->
مثال: دستور زیر، فایل second را در حالت خروجی باز می کند.
<-- Iran Universities Software Students [elibom.ir] -->
<-- Start Code -->
var
second:text;
assign (second, 'A:outfile.dat');
rewrite (second);
<-- End Code -->
<-- Birjand University Software Students [buss.ir] -->
اگر فایلی outfile.dat وجود نداشته باشد آنرا ایجاد می کند و اگر وجود داشته باشد، محتویات قبلی آن را از بین می برد و آن را برای دریافت داده های جدید آماده می کند. اگر فایلی که این دستور بر روی ان اجرا می شود باز شود، بسته شده، دوباره باز می شود.
دستور append
اگر فایل متنی قبلا وجود داشته باشد و بخواهیم اطلاعاتی را به انتهای آن اضافه کنیم، باید آن را با استفاده از دستور append باز کنیم.
نکته: این دستور فقط در مورد فایلهای متنی مورد استفاده قرار می گیرد.
دستور append به صورت زیر به کار می رود:
<-- Iran Universities Software Students [elibom.ir] -->
<-- Start Code -->
append (متغیر فایل متنی);
<-- End Code -->
<-- Birjand University Software Students [buss.ir] -->
وقتی این دستور بر روی فایل اجرا می شود، چنانچه آن فایل موجود نباشد، پیام خطایی صادر می گردد و چنانچه فایل موجود بوده و باز باشد، آن را می بندد و دوباره باز می کند.
مثال: اگر فایل متنی sample.dat وجود داشته باشد و بخواهیم اطلاعاتی را به انتهای آن اضافه کنیم باید آن را به صورت زیر باز کنیم.
<-- Iran Universities Software Students [elibom.ir] -->
<-- Start Code -->
var
fp:text;
assign (fp, 'sample.dat');
append (fp);
<-- End Code -->
<-- Birjand University Software Students [buss.ir] -->
نکته: وقتی فایل متنی با دستورrewrite باز می شود فقط قابل نوشتن و وقتی فایل متنی با reset باز می شود فقط قابل خواندن است و وقتی فایل متنی با append باز می شود، فقط می توان به انتهای آن اطلاعاتی را اضافه کرد. ولی وقتی فایل باینری با reset و rewrite باز می شود، هم قابل خواندن است و هم قابل نوشتن، لذا دستور append در مورد فایلهای باینری کاربردی ندارد.
بستن فایل
پس از اینکه کار با فایل تمام شد، باید آن را بست.فایل متنی با دستور reset و rewrite باز می شوند و در پایان با دستور close بسته می شود.
نکته: چون نوشتن تک تک کاراکترها در فایل، چندان کار آمد نیست. پاسکال، کاراکترهای خروجی را در بافر خروجی ذخیره می کند. وقتی بافر خروجی پر شد، محتویات آن به صورت بلاکی از کاراکترها در فایل خروجی ذخیره می شوند. وقتی فایل خروجی بسته می شود، کاراکترهای باقی مانده در بافر خروجی، به همراه کاراکتر <eof> در آن فایل ذخیره خواهند شد.
اگر فایل خروجی را نبندید، کاراکترهای موجود در بافر خروجی، در فایلی ذخیره نخواهد شد و بخشی از اطلاعات از بین می روند.
دستور close به این صورت به کار می رود:
<-- Iran Universities Software Students [elibom.ir] -->
<-- Start Code -->
close (متغیر فایل);
<-- End Code -->
<-- Birjand University Software Students [buss.ir] -->
مثال: دستور زیر فایلsecond را می بندد:
<-- Iran Universities Software Students [elibom.ir] -->
<-- Start Code -->
close (second);
<-- End Code -->
<-- Birjand University Software Students [buss.ir] -->
نوشتن اطلاعات در فایل متنی
برای نوشتن اطلاعات در فایل متنی، از دستورات write و writeln استفاده می شود. این دستورات قبلا برای نوشتن در صفحه نمایش مورد بررسی قرار گرفتند. کاربرد آنها در مورد فایلها به صورت زیر است:
<-- Iran Universities Software Students [elibom.ir] -->
<-- Start Code -->
write (اطلاعاتی که باید در فایل نوشته شوند,نام متغیر فایل خروجی);
writeln (اطلاعاتی که باید در فایل نوشته شوند,نام متغیر فایل خروجی);
<-- End Code -->
<-- Birjand University Software Students [buss.ir] -->
عملکرد write و writeln در فایل، همانند صفحه نمایش است. اطلاعاتی که از ورودی خوانده می شوند، در بافر ورودی رار می گیرند تا کلید Enter فشار داده شود. پس از فشردن کلید Enter ، کاراکتر <eoln> به انتهای اطلاعات اضافه می شود و برنامه آنرا تحویل می گیردو می تواند آنرا پردازش کند.
هنگام نوشتن ترکیبی از اطلاعات عددی و رشته ای در فایل متنی به نکات زیر توجه کنید:
1. ابتدا اطلاعات عددی و سپس در انتها، اطلاعات رشته ای قرار گیرد.
2. بین اطلاعات عددی حداقل یک فاصله ایجاد شود و نانچه در هر بار نوشتن، اطلاعات رشته ای بیش از یکی باشد، سعی کنید، هر رشته د سطر جداگانه ای قرار گیرد تا در خواندن اطلاعات دچار مشکل نشوید.
خواندن اطلاعات از فایل متنی
برای خواندن اطلاعات از فایل متنی از دستورات read و readln استفاده می شود.
این دستورات قبلا برای خواندن اطلاعات از صفحه کلید مورد استفاده قرار می گرفت. کاربرد آنها در مورد فایلها به این صورت است:
<-- Iran Universities Software Students [elibom.ir] -->
<-- Start Code -->
read (اطلاعاتی که باید در فایل خوانده شوند,نام متغیر فایل ورودی);
readln (اطلاعاتی که باید در فایل خوانده شوند,نام متغیر فایل ورودی);
<-- End Code -->
<-- Birjand University Software Students [buss.ir] -->
عملکرد read,readln در فایل مانند عملکرد آنها در صفحه نمایش است.
تعداد کاراکترهایی که توسط این دستورات خوانده می شوند، نوع متغیری که در آنها ذکر می شود، بستگی دارد.
وقتی داده ها با متغیر کاراکتری خوانده می شوند،فقط یک کاراکتر خوانده می شود. وقتی داده ها با متغیر عددی خوانده می شوند، برنامه از فضاهای خالی، کاراکترهای کنترلی، یا کاراکترهای <eoln> می گذرد تا به اولین کاراکتر غیر اینها برسد. اولین کاراکتر غیر از اینها ممکن است رقم یا علامت باشد، و گرنه، کاراکتر نامعتبر است و خوانده نمی شود.
اگر اولین کاراکتر غیر از اینها، علامت یا رقم باشد، کاراکترهای رقمی(نقطه اعشار) را می خوانند تا به فضای خالی، کاراکتر کنترلی یا <eoln> برسد. وقتی داده ها با متغیر رشته ای خوانده می شوند، تمام کاراکترها تا <eoln> بعدی(شامل این کاراکتر نمی شود) خوانده می شوند.
دستور readln کاراکتر <eoln> را می خواند ولی آنرا ذخیره نمی کند.
هنگام خواندن اطلاعات از فایل، باید دقت داشته باشید که متغیرهایی که در دستور read یا readln استفاده می شوند.
باید نظیر به نظیر با متغیرهایی که در دستور write یا writeln برای نوشتن در فایل استفاده شده اندف همنوع باشند(لازم نیست همنام باشند).
تست انتهای فایل
برنامه ای که اطلاعات را از فایلی می خواند و آنها را پردازش می کند، باید بتواند انتهای فایل را تشخیص دهد.
برای تشخیص انتهای فایل، از فایل کتابخانه ای eof استفاده می شود:
<-- Iran Universities Software Students [elibom.ir] -->
<-- Start Code -->
eof (متغیر فایل)
<-- End Code -->
<-- Birjand University Software Students [buss.ir] -->
سیستم، متغیری به نام اشاره گر فایل دارد و در فایل ورودی، مشخص می کند که هر بار کدام کاراکتر باید از ورودی خوانده ود و در فایل خروجی، مشخص می کند که عمل نوشتن در کجای فایلها باید صورت گیرد.
نکته: اشاره گر فایل توسط دستورات ورودی - خروجی جابجا می شوند.
تابع eof مشخص می کند که آیا اشاره گر فایل به کاراکتر انتهای فایل، یعنی <eof> رسید یا خیر.
اگر رسیده باشد، یک مقدار درستی(true) و گرنه مقدار نادرستی (false) را بر میگرداند.
مثال: برنامه ای که متنی را از ورودی خوانده، آرا به رمز تبدیل کند و در فایل ذخیره می نمایدف برنامه می تواند متن اصلی یا متن رمز گذاری شده را نمایش دهد.
برای تبدیل به رمز، از کاراکتری به عنوان کلید رمز استفاده شده است.
کد اسکی هر کاراکتر ورودی، یا کد اسکی کلید رمز جمع می شود، چنانچه حاصل جمع بیش از 127 باشد، 127 واحد از آن کسر می شود و سپس به کاراکتری تبدیل شده (توسط زیر برنامه chr) در فایل ذخیره می شود.
اگر حاصل جمع کمتر از 127 باشد، پس از تبدیل به کاراکتر رمز، در فایل ذخیره می گردد.
برنامه دارای منویی با 5 گزینه است که با گزینه ای است که با گزینه اول می توان کلید رمزی را وارد کرد.
چنانچه این گزینه انتخاب نشود، کلید رمز، حرف C است. گزینه دوم، متن اصلی را از صفحه کاید دریافت می کند.
پس از وارد کردن متن، حرف ; را وارد کنید تا برنامه پایان متن را تشخیص دهد.
گزینه سوم، برای نمایش متن رمزی و گزینه چهارم، برای نمایش متن اصلی به کار می رود و گزینه پنجم هم موجب خروج از برنامه می شود.
<-- Iran Universities Software Students [elibom.ir] -->
<-- Start Code -->
program iuss;
uses crt;
var
key : char;
fp : text;
choice : integer;
{***********************}
function menu : integer;
var choice : integer;
begin
clrscr;
gotoxy(10, 5);
write('1 . Enter new key.');
gotoxy(10, 6);
write('2 . Enter original text.');
gotoxy(10, 7);
write('3 . Display coded test.');
gotoxy(10, 8);
write('4 . Display original text.');
gotoxy(10, 9);
write('5 . Exit.');
repeat
gotoxy(10, 11);
write('Enter your select:');
gotoxy(28, 11);
read(choice);
until (choice >= 1) and (choice <= 5);
menu := choice;
end;
{***********************}
procedure getkey(var key : char);
begin
clrscr;
writeln('Current key is : ',key);
write('Enter new key : ');
readln(key);
end;
{***********************}
procedure gettxt(key : char);
var
ch, code : char;
m : integer;
begin
clrscr;
assign (fp, 'test');
rewrite(fp);
writeln('Enter your text(enter ; for end):');
read(ch);
while ch <> ';' do
begin
m := (ord(ch) + ord(key));
if m > 127 then
m := m - 127;
code := chr(m);
write(fp, ch);
read(ch);
end;
close(fp);
end;{gettxt}
{**************************}
procedure displaytxt(key : char; choice : integer);
var
ch, code : char;
m : integer;
begin
clrscr;
assign(fp, 'test');
reset(fp);
while not eof(fp) do
begin
read(fp, code);
if choice = 4 then
ch := code
else
begin
m := (ord(code) - ord(key));
if m < 0 then
begin
m := m + 127;
ch := chr(m);
end;
end;{else}
write(ch);
end;{while}
close(fp);
readln;
readln;
end;
{******************}
begin
clrscr;
key := 'x';
repeat
choice := menu;
case choice of
1 : getkey(key);
2 : gettxt(key);
3 : displaytxt(key, choice);
4 : displaytxt(key, choice);
end;
until choice = 5;
end.
<-- End Code -->
<-- Birjand University Software Students [buss.ir] -->
حذف فایلها
با استفاده از دستور erase که در واحد crt قرار دارد، می توان فایل موجود در دیسک را حذف کرد.
این دستور به صورت زیر به کار می رود:
<-- Iran Universities Software Students [elibom.ir] -->
<-- Start Code -->
erase (متغیر فایل);
<-- End Code -->
<-- Birjand University Software Students [buss.ir] -->
فایلی که توسط erase حذف می شود نباید باز باشد.
مثال: دستورات زیرف فایل test.dat را در صورت وجود درمسیر جاری، حذف می کند.
<-- Iran Universities Software Students [elibom.ir] -->
<-- Start Code -->
var
fp:text;
assign (fp, 'test.dat')';
erase (fp);
<-- End Code -->
<-- Birjand University Software Students [buss.ir] -->
تغییر نام فایلها
برای تغییر نام فایلهای موجود در دیسک از دستور rename که در واحد crt قرار دارد به صورت زیر استفاده می شود:
<-- Iran Universities Software Students [elibom.ir] -->
<-- Start Code -->
rename (نام جدید,متغیر فایل);
<-- End Code -->
<-- Birjand University Software Students [buss.ir] -->
مثال: دستورات زیر، فایل rec.dat را در صورت وجود، به iuss.one تغییر نام میدهد.
<-- Iran Universities Software Students [elibom.ir] -->
<-- Start Code -->
var
fp:text;
assign (fp, 'rec.dat');
rename (fp, 'iuss.one);
<-- End Code -->
<-- Birjand University Software Students [buss.ir] -->
فایلهای باینری
فایلهای باینری فایلهای هسند که محتویات آنها می تواند از نوع صحیح، اعشاری یا رکورد باشند (محتویات این فایلها، متنی نیست). نحوه ذخیره اطلاعات در فایلهای باینری، مثل ذخیره اطلاعات در حافظه RAM است (نه مانند صفحه نمایش).
برای تعریف نوع فایلهای باینری به این صورت عمل می کنیم:
<-- Iran Universities Software Students [elibom.ir] -->
<-- Start Code -->
type نام نوع فایل = file of نوع اطلاعات ;
var نام نوع فایل : نام متغیر فایل ;
<-- End Code -->
<-- Birjand University Software Students [buss.ir] -->
در تعریف فایلهای باینری، ابتدا نوع فایل باینری را تعریف کرده، سپس متغیرهایی از نوع فایل را تعریف می کنیم.
<-- Iran Universities Software Students [elibom.ir] -->
<-- Start Code -->
type binfile = file of integer;
var infile : binfile;
<-- End Code -->
<-- Birjand University Software Students [buss.ir] -->
در این دستورات، ابتدا نوع فایل binfile ، از نوع صحیح تعریف ش و معنایش اینست که محتویات آن را نوع صحیح هستند. سپس متغیر فایلی به نام infile از نوع binfile تعریف گردید.
در فایل باینری، برای انتساب متغیر فایل به فایلی بر روی دیسک، از دستور assign، برای ایجاد فایل جدید و نوشتن اطلاعات در آن دستور rewrite و برای باز کردن فایل در حالت ورودی از دستور reset استفاده می شود.
در فایلهای باینری، فایل چه با reset و چه با rewrite باز شود، به عنوان وسیله ورودی - خروجی محسوب خواهد شد.
برای نوشتن اطلاعات در فایل باینری از دستور write و برای خواندن اطلاعات از فایل، از دستور read و برای تست انتهای فایل از تابع eof و برای بستن فایلی، از تابع close استفاده می شود. شیوه کاربرد این دستورات را در فایلهای متنی دیدید.
نکته: در فایلهای باینری از دستورات writeln , readln استفاده نمی شود و در دستورات read,write برای خواندن و نوشتن در فایل، هر بار فقط یک مقدار را می توان در فایل نوشت یا از فایل خواند.
فایلهای نوع صحیح
فایلهای که محتویات آنها مقادیر صحیح باشد، فایلهای نوع صحیح نام دارند.
فایلهای نوع اعشاری
فایلهای نوع اعشاری فایلهایی است که محتویات آنها از نوع اعشاری باشد.
ورودی - خروجی رکورد
محتویات فایلهای باینری می تواند رکورد باشد و فایلی که محتویات آن رکورد باشد و فایلی که محتویات آن رکورد باشد، فایلی از نوع رکورد نام دارد. ورودی - خروجی رکورد از اهمیت ویژه ای برخوردار است.
در ادامه، مثالهایی از این نوع ورودی خروجی را مشاهده خواهیم کرد.
مثال: برنامه ای که نام کتاب، شماره، کد ناشر،سال انتشار، تعداد صفحات کتاب و نام نوینده کتابخانه شخصی شما را دریافت کرده، در فایلی ذخیره می کند و سپس اعمال زیر را انجام می دهد:
1. گزارش از فایل تهیه می کند.
2. کتابهایی را که در سال معینی انتشار یافته اند نمایش می دهد.
3. کتابهایی از نویسنده خاص را جستجو کرده، نمایش می دهد.
4. میانگین تعداد صفحات کتاب نویسنده ای را مشخص می کند.
5. کتابهای مربوط به ناشر خاصی را نمایش می دهد (این زیر برنامه مانند writeln است).
6. کتابی را در کتابخانه جستجو می کند.
7. اطلاعات مربوط به کتابی را تصحیح می کند.
8. شماره کتابی را خوانده، آن را از فایل حذف می کند.
دانلود
فایلهای تصادفی
تاکنون برای ذخیره اطلاعات در فایل و یا خواندن اطلاعات از آن، به روش ترتیبی عمل کردیم.
در مواردی که بخواهیم با تمام رکوردهای فایل دسترسی داشته باشیم و آنها را پردازش کنیم ، روش ترتیبی روش مناسبی است.
ولی گر بواهیم فقط چند رکورد از یک فایل بزرگ را پردازش کنیم، روش ترتیبی دیگر مناسب نخواهد بود. در این گونه موارد باید بتوان مستقیما به رکوردهای مور نیاز دست یافت.
فایلهایی که بتوان به هر یک از رکوردهای آن، به هر صورت دلخواهی (نه فقط به صورت ترتیبی) دست یافت، فایلهای دستیابی مستقیم گویند. نام دیگر این فایلها، فایلهای تصادفی، هست.
هر یک از فایلهای باینری می توانند به صورت تصادفی یاده سازی شوند.
نکته: در حالت تصادفی، همزمان می توان اطلاعاتی را در فایل نوشت و طلاعاتی را از فایل خواند.
روش دستیابی به رکوردها در فایل ترتیبی به این صورت است که با خواندن هر رکورد، اشاره گر فایل به ابتدای رکورد بعدی می رود، دستور خواندن بعدی، این رکورد را می خواند و این روند تا خواندن تمامی رکورد ادامه می یابد.
اگر بتوانیم اشاره گر فایل را به هر رکورد دلخواهی ببریم، آنگاه می توانیم هر رکورد دلخاه را بخوانیم و یا در هر محل دلخواه بنویسیم.
برای انتقال اشاره گر فایل به رکورد دلخواه، از دستور seek استفاده کنید و به این صورت بنویسید:
<-- Iran Universities Software Students [elibom.ir] -->
<-- Start Code -->
seek (شماره رکورد , نام فایل);
<-- End Code -->
<-- Birjand University Software Students [buss.ir] -->
پس از ذکر نام ایل در دستور seek، شماره رکوردی که اشاره گر فایل باید به آنجا منتقل شود، ذکر کنید.
بدین ترتیبف اشاره گر فایل به ابتدای ان رکورد می رود و عمل خواندن یا نوشتن این رکورد را می توان با دستور read و write انجام داد.
دستور زیر را ببینید:
<-- Iran Universities Software Students [elibom.ir] -->
<-- Start Code -->
seek (myfile , 9);
<-- End Code -->
<-- Birjand University Software Students [buss.ir] -->
این دستور، اشاره گر فایل را به رکورد شماره 9 می برد. این رکورد در واقع، رکورد دهم(10) فایل است، چون همانجور که قبلا گفتم، رکوردها از صفر شروع می شوند.
در واقع می توان این طور تصور کرد که فضا فال تصادفی به ناحیه هایی تقسیم می شود که هر ناحیه، به اندازه طو رکورد است و هر ناحیه ا شماره ای مشخص شود.تابع seek اشاره گر فایل را به ابتدای ناحیه ها م رد و دستور نوشتن می تواند در این ناحیه بنویسد و دستور خواندن می تواند از این ناحیه بخواند.
تابع filesize
این تابع برای تعیین رکوردهای فایل مورد استفاده قرار می گیرد و به صورت زیر بکار می رود:
<-- Iran Universities Software Students [elibom.ir] -->
<-- Start Code -->
filesize (متغیر فایل)
<-- End Code -->
<-- Birjand University Software Students [buss.ir] -->
از این تابع، معمولا برای تشخیص طول فایل و اضافه کردن رکوردهایی به انتهای فایل استفاده می گردد.
*********************
خوب. آنچه که خواندید قستهای مهم و کلیدی از کتاب "برنامه نویسی به زبان پاسکال" نوشته "مهندس عین الله جعفر نژاد قمی" بود که به طور خلاصه تقدیم گردید.
ما از ارائه این متن ، تنها قصدی که داریم، آموزش مطالب بود و هیچ قصد خاص دیگری نداشتیم و نخواهیم داشت.
با تشکر
Medals
[پاسخ]