Слайд 2Для початку декілька визначень:
Визначення 1.
Файл являє собою послідовність елементів того
самого типу. Число елементів не фіксовано. У кожний момент доступний
лише один елемент. Говорять, що на цей елемент встановлений покажчик файлу.
Слайд 3Визначення 2.
Якщо виконалася операція запису в n-ий елемент файлу, то
покажчик автоматично просувається до (n+1)-го елемента файлу, тобто для запису
стає доступним вже тільки (n+1)-ий елемент.
Слайд 4Визначення 3.
Довжиною файлу називається число записаних елементів. Файл, що не
містить елементів, називається порожнім, його довжина дорівнює нулю. Читати файл
можна також лише послідовно по одному елементу.
Ми будемо в нашій лекції розглядати лише файли послідовного доступу.
Слайд 5Загальний вигляд опису типу File:
Type R = File Of
TC;
Тут R - ідентифікатор типу, TC - тип елементів (може
бути будь-яким, крім типу File).
Слайд 6 Наприклад, файл F дійсних чисел:
Type N = File Of
Real;
Var F:N; {опис змінної файлу}
Файл може бути описаний і
безпосередньо при описі змінної, наприклад:
Var F:File Of Real;
Слайд 7 Можливий опис змінної без вказівки типу елементів:
Var F:File;
У цьому
випадку файл називається нетипованим. Для роботи з такими файлами використовуються
відмінні від зазначених нижче процедури й функції.
Слайд 8 Для того, щоб асоціювати (пов’язати) змінну F з ім'ям файлу,
з яким будемо працювати, у Паскалі використовується функція Assign.
Загальний
вигляд функції:
Assign (F,'My_file.dat');
Слайд 9 Тут F - ім'я змінної типу File з якою тепер
пов'язаний файл My_file.dat. Далі в програмі, коли ми будемо звертатися
до змінної F, наприклад записувати дані, то ми будемо працювати з файлом My_file.dat. Разом з файлом може вказуватися й шлях.
Приклад.
Assign (F,'C:\Tp7\Bin\My_file.dat');
Слайд 10Відкриття, читання й запис у файл.
Процедура Reset.
Reset відкриває тільки
вже існуючі файли на читання й запис.
Загальний вигляд :
Reset
(F); {Вважається, що файл My_file.dat існує}
Слайд 11Приклад.
Type Nf:File Of Integer;
Var F:Nf; Tt:Integer;
Begin
Assign(F,'Chusla.Prs');
Reset(F);
While
Not Eof(F) do
Begin
Read(F,Tt);
Write(Tt);
End;
Close(F);
End.
Слайд 12Процедура Rewrite.
Rewrite відкриває існуючий файл на перезапис тобто з втратою
всієї попередньої інформації, що зберігається в ньому, або якщо файл
не існує, то створює новий файл із тим ім'ям, з яким асоційована файлова змінна.
Загальний вигляд:
Rewrite(F);
Слайд 13 Приклад. Треба створити файл для запису масиву квадратів цілих чисел
від 1 до 100 .
Var F:File Of Integer; i:Integer;
Begin
Assign(F,'D:\Tp7\Mymass.Mas');
Rewrite(F);
For
i:=1 to 100 do
Writeln(F,Sqr(i));
Close(F);
End.
Слайд 14Ввід і вивід здійснюється за допомогою процедур Read і Write
Загальний вигляд:
Read(F,P1,P2,P3, … ,PN);
P1,P2,P3, … ,PN - змінні в
які зчитуються значення з файлу.
Write(F,T1,T2,T3, … ,TN);
T1,T2,T3, … ,TN - змінні, значення яких запишуться у файл.
Слайд 15Закриття файлу.
Після використання процедур Reset і Rewrite файл НЕОБХІДНО закрити.
Це робиться за допомогою процедури Close.
Загальний вигляд:
Close(F);
Слайд 16 Переміщення по файлу
Дана група операцій додає декілька корисних можливостей,
дозволяючи довільно змінювати послідовний порядок операцій читання й запису. Ця
група містить дві процедури
Seek
Truncate
і три додаткові функції
Filesize
Filepos
EOF
Слайд 17 Перераховані процедури і функції безпосередньо працюють із поточним покажчиком файлу.
Процедура SEEK дозволяє явно змінити значення поточного покажчика, встановивши його
на елемент файлу із заданим номером.
Загальний вигляд:
SEEK(F,N); N - номер елемента у файлі. Процедура має два параметри: змінну файлового типу й ціле (типу longint). Другий параметр розуміється як порядковий номер елементу файлу, на який необхідно встановити покажчик.
Слайд 18 Приклад.
SEEK(F,23);
Встановить покажчик на 23 елемент у файлі.
Після виконання
процедури SEEK подальші операції читання або запису будуть проводитися, починаючи
із встановленої позиції покажчика.
Слайд 19Процедура TRUNCATE(F) видаляє частину файлу починаючи з даної ( на
яку встановлений покажчик) і до його кінця.
Функції FILESIZE і
FILEPOS дозволяють одержати додаткову інформацію про файл, що вказується в якості їхнього єдиного параметра. Функція FILESIZE повертає загальне число елементів файлу, а функція FILEPOS - номер елемента, на який встановлений поточний покажчик.
Слайд 20ERASE - видаляє файл. Файл повинен бути закритий.
Загальний вигляд:
ERASE(F);
Приклад:
PROGRAM NM2;
VAR F: FILE;
BEGIN
ASSIGN(F,'D:\MARIO.EXE');
ERASE(F);
END.
Слайд 21 Стандартна функція EOF(F), де F-ім'я файлу. Якщо покажчик файлу просунувся
за останній елемент файлу (за останнім символом для текстових файлів),
то ця функція приймає значення TRUE, у всіх інших випадках значення FALSE.
Використовуючи ці функції, можна організувати досить складні алгоритми роботи з файлами.
Слайд 22Наведемо декілька простих прикладів:
Seek(F,FilePos(F)+1) { пропуск одного елемента }
Seek(F,0) { встановлення покажчика на початок файлу )
Seek (F,
FileSize (F)) { встановлення поточного покажчика безпосередньо за останнім елементом файлу; це може служити вихідною позицією для додавання елементів в "хвіст" файлу }
Слайд 23Program T20;
Var F:File Of Integer; U: String;
Begin
Assign(F,'C:\Autoexec.bat');
Reset(F);
Writeln ('Зміст Файлу
Autoexec.bat')
While Not Eof(F) do
Begin
Readln(F,U);
Writeln(U);
End;
Write('****Кінець Файлу****');
Close(F);
End.
Слайд 24 Зауваження: способи доступу до файлів (а не самі файли!) можна
розділити на два типи: послідовної й довільний. Наочним прикладом послідовного
доступу є запис на магнітній стрічці - не можна прочитати інформацію, записану в середині стрічки, не прочитавши інформацію, записану на початку стрічки (потрібно розуміти, що приклад умовний і не позбавлений недоліків). Довільний доступ можна проілюструвати на прикладі пластинки. Ми можемо потрапити на довільний запис на пластинці, просто встановивши на неї голку.
Слайд 25 Всі процедури й функції крім SEEK були процедурами для послідовного
доступу до файлів, процедура SEEK - для довільного.
Наведемо приклад
програми для типованих файлів.
Нехай потрібно створити масив даних студентів першого курсу: прізвище, ім’я, група, домашня адреса. Цей масив записати в типований файл, виконати читання із файлу в новий масив і вивести дані студентів на задану літеру. Програма що вирішує дане завдання наведена нижче.
Слайд 26Program Typ_File;
Uses crt;
Type Student=record
Prizw:string[20];
Imja:string[20];
Grupa:string[8];
Adresa:record
Misto:string[20];
Vulycja:string[20];
Budynok:String[8];
Kvartura:word;
end;
end;
Слайд 27Const n=150;
Var A,A2:array [1..n] of Student;
f:file of Student;
i,j,m:byte;
S,S2:string[1];
Begin
Assign(f,'Studentu.dat');
rewrite(f);
Слайд 28For i:=1 to n do
begin
with a[i] do
begin
Writeln('Wwedit Prizwusche',i:3,' Studenta');
readln(Prizw);
Writeln('Wwedit Imja');
readln(Imja);
Writeln('Wwedit Grupu');
readln(Grupa);
Слайд 29With Adresa do
begin
Writeln('Wwedit Misto');
readln(Misto);
Writeln('Wwedit Vulycju');
readln(Vulycja);
Writeln('Wwedit Budynok');
readln(Budynok);
Writeln('Wwedit Kvarturu');
readln(Kvartura);
end;
end;
Слайд 30 write(f,a[i]);
end;
close(f);
reset(f);
i:=0;
While not Eof(f) do
begin
i:=i+1;
read(f,a2[i]);
end;
Слайд 31 m:=FileSize(F);
close(f);
repeat
clrscr;
Writeln('Wwedit na jaku
literu wykonuem poshuk');
readln(S);
Writeln('----Studentu na literu ',
S:1,'----');
Слайд 32For i:=1 to m do
with a2[i] do
begin
If Prizw[1]=S then
begin
Writeln(Prizw,', ',Imja,' Grupa ',Grupa);
With Adresa do
Writeln('Adresa: ',Misto,', ',Vulycja,', ', Budynok,'/',Kvartura);
Writeln('-------------------------------------------');
end;
end;
Слайд 33Writeln('Dlja nowogo poshuku natusnit Y, dla wuhodu N');
readln(S2);
until
(S2='N') or (S2='n');
end.