Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Тому виникає потреба в організації даних таким чином, щоб і Розмір і час існування їх були як завгодно великими. Це стало можливим завдяки використання файлів.

Поиск

Файли – пойменовані ділянки пам’яті, які містять деякі дані.

Традиційно файли зберігаються на дисках – дискові файли. Файли можуть розміщуватися в оперативній пам’яті на віртуальних дисках.

В програмі файли представляються спеціальними змінними – файловими. Ця змінна є свого роду буфером між конкретним файлом на диску, з яким вона зв’язана, і програмою.

Одна і та ж змінна може бути зв’язана із різними файлами, але не одночасно.

В залежності від способу структурування даних в Pascal відрізняють три види файлів і файлових змінних:

Типізовані.

Текстові.

Безтипові.

Типізовані файли містять структури даних однакового типу: скалярні типи або складені.

Наприклад

Файл дійсних чисел є послідовністю елементів із шести байт, що відповідають дійсним числам.

Файл цілих чисел – послідовність двобайтових чисел.

Файл записів – послідовність структур, що відповідають певному комбінованому типу. Наприклад 321 байт.

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

Текстові файли можна вважати файлами ASCII-форматами. Особливістю є те, що послідовність розбивається на рядки спеціальними комбінаціями символів (end, old, line).

Безтипові файли не передбачають структурування даних. Вони розглядаються як неперервна послідовність байтів, що може ділитися на блоки заданих блоків.

Встановлюючи та завершальні операції над файлами

Перед використанням операції над файлом, він повинен бути відкритим.

Читання, запис, до запис в кінець

Після завершення операції із файлом для звільнення для файлової змінної його потрібно закрити.

Вид та тип файла визначається типом файлової змінної, що представляє файл.

Типізовані файлові змінні

VAR

<файлова змінна>: FILE OF <тип>;

Наприклад

Var

f1: file of integer;

f2: file of real;

f3: file of student;

Текстові файлові змінні оголошуються в розділі var при допомозі text.

VAR

<файлова змінна1>,<файлова змінна2>…: TEXT;

Безтипові файлові змінні оголошуються в розділі var при допомозі file.

VAR

<файлова змінна1>,<файлова змінна2>,…:FILE;

Для роботи із файлами використовуються наступні встановлюючи та завершальні процедури.

Процедура зв’язування певної файлової змінної із конкретним файлом на диску

ASSIGN (<файлова змінна>,’<ім'я файла>’);

Файлова змінна по замовлюванню вважається без типовою.

Якщо файл із вказаним іменем відсутній у поточному каталозі, то цей файл буде створений.

Тип фактичної файлової змінної, що використовується в процедурі assign означає вид і тип файлу.

Наприклад

Var

f1: file of real;

f2: text;

f3: file;

Begin

assign(f1, ‘file1.dat’);

assign(f2, ‘file2.dat’);

assign(f3, ‘file3.dat’);

2. Процедуравідкриттяфайлудлячитання

RESET(<файлова змінна>);

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

3. Процедуравідкриванняфайлудлязапису

REWRITE(<файлова змінна>);

Відкриває файл для запису, якщо він існує. Якщо файла ще не було, то це не помилка. Відкриття існуючого файла призводить до знищення попередньої інформації.

4. Процедуразакриванняфайлу

CLOSE(<файлова змінна>);

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

Закриття файлу при запису призводить до фізичного запису файлу на диск.

Після закриття файлова змінна звільняється і може бути використана для зв’язування для інших файлів. Закритий файл можна знову відкрити в новому режимі.

5. Процедурапримусовогоочищеннявнутрішньогобуфераобміну

FLUSH (<файлова змінна>);

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

Спеціальні підпрограми для роботи з типізованими файлами

Відкриваються і закриваються всі види файлів однаково.

Операції зчитування, запису і переміщення по файлу мають відмінності для різних видів файлів.

Типізовані файли умовно є послідовністю елементів деякого базового типу.

Розмір елемента визначається розміром його типу. Всі елементи у файлі умовно записуються в один рядок.

Для роботи з типізованими файлами використовують такі процедури і функції.

Розглянуті раніше встановлюючи та завершальні підпрограми

Процедура читання

READ (<файлова змінна>,<список параметрів вводу>);

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

Решта параметрів це перелікк змінних однакового типу, що співпадає з типом файлу. Кількість параметрів вводу має бути не меншою ніж кількість елементів у файлі від поточної позиції файлового вказівника до кінця, інакше помилка. Виклик цієї процедури переміщує файловий вказівник на відповідну кількість елементів.

Процедура запису у файл

WRITE (<файлова змінна>,<список параметрів виводу>);

Першим параметром процедури є файлова змінна. Ця змінна повинна попередньо зв’язана з конкретним файлом і цей файл повинен бути відкритим для читання або запису.

Якщо файл відкритий для запису, то всі дані стираються і запис виконується спочатку. Якщо ж файл відкритий для читання, то всі дані залишаються і файл відкривається для модифікації. Це має місце лише для типізованих файлів. Список параметрів виводу складається із довільної кількості змінних або констант, тип яких співпадає із типом файлу. Виконання процедури запису переміщує файловий вказівник на відповідну кількість записів, причому або дані перезаписуються поверх старих або доповнюються в кінець, причому елемент eof посувається.

Наприклад

Var

f: file of integer;

x, y, z: integer;

assign(f, ‘file int.dat’);

reset(f);

x:=3; y:=4; z:=5;

write(f,x,y,z);

4. Функціявизначеннярозміруфайла у записі

Операційна система легко повідомляє про розмір файла у байтах. Якщо ж потрібно встановити кількість елементів певного типу у цьому файлі

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

FILESIZE(<файлова змінна>);

Якщо один і той самий файл зв’язати з різними файловими змінними різних типів, то результат функції буде різним.

Наприклад

Var

f1: file of integer;

f2:file of real;

x, y:longint;

assign(f1, ‘file.dat’);

reset(f1);

x:=filesize(f1);

close(f1);

assign(f2, ‘file.dat’);

reset(f2);

y:=filesize(f2);

close(f2);

5. функціявизначенняпозиціїфайловоговказівника

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

FILEPOS (<файлова змінна>);

Процедура встановлення файлового вказівника в задану позицію

Якщо потрібно перемістити вказівник перед довільним k-тим елементом файлу, то користуватися k операціями читання буде не ефективною. Для цього викликають процедуру

SEEK (<файлова змінна>;<номер позиції>);

Другий параметр номер елемента, перед яким стає файловий вказівник.

7. Функціявизначеннякінцяфайла

EOF(<файлова змінна>);

Результат true, якщо eof в кінці файлу і false – якщо на будь-якій іншій позиції.

Оскільки в більшості випадків кількість елементів у файлі є невизначеною наперед, то для циклічних операцій з елементами файлу викликається оператор з передумовою

WHILE NOT EOF (<файлова змінна>) DO

8. Функціявстановленняфайловоговказівника в кінецьфайлу

SEEKEOF(<файлова змінна>);

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

Наприклад

Створити типізований файл цілих чисел, відкрити його для читання і знайти суму кожного п’ятого елементу.

Var

f: file of integer;

i, j, x: integer;

Begin

assign(f, ‘file.dat’);

rewrite(f);

for i:=1 to 20 do

Begin

readln(x);

write(f,x);

end;

close (f);

reset(f);

j:=0; x:=0;

While not eof (f) do

Begin

read(f,i);

x:=x+i; j:=j+5;

if filesize (f) <=j then

seekeof(f) else seek (f,j);

end;

close(f);

writeln(x);

End.

9. Процедуравідсіканняхвостовоїчастинифайлу



Поделиться:


Последнее изменение этой страницы: 2016-09-19; просмотров: 334; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.14.145.167 (0.007 с.)