WWW.REFERATCENTRAL.ORG.UA - Я ТУТ НАВЧАЮСЬ

... відкритий, безкоштовний архів рефератів, курсових, дипломних робіт

ГоловнаІнформатика, Компютерні науки → Робота з файлами - Реферат

Робота з файлами - Реферат

for і:=1 to 5 do { обмежимося введенням п'яти студентів }

begin

Write('Прізвище: ');

Readln(Fam);

Write('Ім'я: ');

Readln(Name);

Write('По батькові: ');

ReadLn(Otch);

Write(F, Fam, Name, Otch);

end;

close(F);

WriteLn(' Прізвище Ім'я По батькові');

Reset(F); { відкриття існуючого файлу }

for i:=1 to 5 do

begin

Read(F, Fam, Name, Otch);

Write(Fam:16, Name:11, Otch:15);

end;

close(F);

End.

Компоненти типізованого файлу можуть бути наступних типів:

- базового: byte, word, longint, integer, real, запис, char, string;

- структурного;

- регулярного.

При цьому усі компоненти файлу мають той самий тип. Це означає, що довжина компоненти фіксована. Описується такий файл у програмі в такий спосіб :

Var

F1 : File of byte;

F2 : File of string[80];

F3 : File of real;

. . .

F : File of RecFile;

Тут F1, F2, F3, F - це файлові змінні, котрі вказують на файли, компоненти яких відповідно є типу byte, string, real і record.

Читання компонентів файлу виконується процедурою:

Read(, );

Запис компонентів у файл виконується за допомогою процедури:

Write(, );

Приклад:

Var

X, Y : array[1..100] of integer; { масиви координат }

F : file of real;

i : byte;

Begin

. . .

. . .

Assign(F, 'Coor.dat'); { файл буде створюватися в поточному каталозі }

ReWrite(F); { відкриття файлу для запису }

For і:= 1 to 100 do

Write(F, X[і], Y[і]); { запис координат у файл }

Close(F);

End.

У наведеному фрагменті програми координати записані послідовними парами X, Y. При такій організації файлу відбувається часте звертання до зовнішнього носія, це призводить до уповільнення роботи програми, що особливо помітно у процесі роботи з великими обсягами даних. Тому рекомендуються дані записувати у файл і зчитувати з файлу великими блоками, приблизно кратним 512 байтам. Відповідно до цього модифікуємо програму в такий спосіб:

Type

Coord = array[1..100] of integer; { масиви координат }

. . .

Var X, Y : Coord; { масиви координат }

F : file of Coord; { файл регулярного типу }

i : byte;

Begin

. . .

. . .

Assign(F, 'Coor.dat'); { файл буде створюватися в поточному каталозі }

ReWrite(F); { відкриття файлу для запису }

Write(F, X); { запис масиву координат Х в файл }

Write(F, Y); { запис масиву координат Y у файл }

Close(F);

End.

Тепер у файлі спочатку записані 100 координат Х, а потім 100 координат Y. Дані файлу ми записали двома великими блоками по 600 байтів кожний. Зчитування координат з файлу виконується аналогічно, у програмі потрібно замість процедури REWRITE використовувати процедуру RESET, а замість пропозиції WRITE використовувати пропозицію READ.

Добре структуровані дані, наприклад, дані про який-небудь об'єкт, зручно

описувати типом "запис". У цьому випадку компонента файлу буде структурного типу.

Приклад:

Type RecFile = record { запис даних по студенту }

Fam, Name, Otch : string[15];

GodR : word;

NGrup : string[10];

end;

Var i : integer;

Buf : RecFile;

FilStud : file of RecFile;

Begin

Assign(FilStud, 'Stud.dat');

ReWrite(FilStud);

WriteLn('Уведіть дані по студентах:');

For і:= 1 to 10 do { обмежимося 10 записами }

begin

Write('Прізвище : ');

Readln(Buf.Fam);

Write('Ім'я : ');

Readln(Buf.Name);

Write('По батькові : ');

Resdln(Buf.Otch);

Write('Рік народження : ');

Readln(Buf.God);

Write('N групи : ');

Readln(Buf.NGrup);

{ запис даних у файл }

Write(FilStud, Buf); { Buf - звертання до всього запису }

end;

Close(FilStud);

End.

Читання компонентів типізованого файлу можна здійснювати як послідовним, так і прямим методом доступу. Послідовний доступ - це є доступ до компонента файлу тільки після перебору всіх попередніх. Прямий доступ - це є доступ відразу до зазначеного компонента.

Тому що типізовані файли мають компоненти фіксованої довжини, існує можливість організувати прямий доступ. Для організації прямого доступу до компонент файлу існують стандартні процедури Seek, FilePos, FileSize :

Seek(,);

FilePos();

FileSize().

Процедура Seek здійснює прямий доступ до будь-якого компонента файлу. Тут - позиція покажчика компонент файлу. Вона може приймати наступні значення:

+1 - установити покажчик на наступну компонент;

-1 - установити покажчик на попередню компонент;

і - установити покажчик на i-ту компоненту.

Процедура FilePos визначає номер поточної позиції у файлі, а точніше номер поточної компоненти.

Процедура FileSize визначає розмір зазначеного файлу - кількість компонент. Нумерація компонентів починається з нуля.

Приклад:

Type RecFile = record { запис даних по студенту }

Fam, Name, Otch : string[15];

GodR : word;

NGrup : string[10];

end;

Var i : integer;

Buf : RecFile;

FilStud : file of RecFile;

Begin

Assign(FilStud, 'Stud.dat');

Reset(FilStud);

i:= FileSize;

WriteLn('У файлі ', і, ' компонент');

Seek(FilStud, і-1);

Read(FilStud, Buf);

Buf.God:= '1973';

Seek(FilStud, -1);

Write(FilStud, Buf);

Close(FilStud);

End.

Відкриваючи типізований файл процедурою RESET, можна цей файл не тільки читати, але і записувати в нього нову інформацію. При цьому файл повинний уже існувати на диску.

Нетипізовані файли можуть містити у своєму складі будь-які типи компонент. При цьому правильність запису і зчитування цих компонентів цілком покладається на програміста. Довжина компонентів може бути різною. Для відкриття нетипізованих файлів використовуються процедури Reset, ReWrite:

Reset(, );

ReWrite(, ).

Тому що за одне звертання до нетипізованого файлу можна зчитувати не одну компоненту, а менше, і тому що довжини компонентів можуть бути різні, то в процедурах Reset і ReWrite указується максимальний розмір буфера вводу-виводу в байтах.

Читання компонентів з файлу і запис їх у файл виконується процедурами BlockRead і BlockWrite:

BlockRead(, ,< компонент, що зчитуються за один раз >, [,]);

BlockWrite(,,, [,< компоненти, що записуються >]).

Loading...

 
 

Цікаве