Організація зовнішніх файлів і робота з ними. p>
Під файлом розуміють будь-який набір даних. Так, вихідні дані упрограмі можна вважати файлом. Файлом можуть бути і результати, і самапрограма. p>
У практиці програмування часто зустрічаються задачі, при вирішенніяких можна зберігати дані обробляються на зовнішньому носії. У цьомувипадку дані оформлюються у вигляді зовнішніх файлів. В якості носія можебути МД (магнітний диск). p>
До цих пір ми розглядали завдання, в яких вихідні данінадходили з клавіатури в пам'ять ЕОМ, а результати виводилися на екран.
Таким чином, ні вихідні дані, ні результати обчислень не зберігалися.
Кожного разу при виконанні однієї і тієї ж програми (особливо при їїналагодження) доводиться заново вводити вихідні дані. p>
Створення зовнішніх файлів даних для постійного зберігання на МД іможливість обробляти ці файли в програмі є ефективнимзасобом програмування. p>
У PASKALe файл являє собою послідовність елементів одноготипу (простого або складного). На відміну від масиву довжина файлу, тобтокількість елементів, не задається, місце елемента не визначається індексомі кожен елемент стає доступним тількипісля перебору всіх попередніх елементів. Такі файли називаютьсяпослідовними. Необхідно зауважити, що створення і обробка зовнішніхфайлів залежать як від конкретної реалізації мікроЕОМ, так і від версії
PASKAL. P>
У багатьох версіях PASKAL для мікроЕОМ допускається зберігання файлів надиску як символьних даних. При зчитуванні файлу в оперативну пам'ятьмашини символи файла перетворюються в той тип даних, який оголошений впрограмі. p>
Якщо програма взаємодіє із зовнішніми файлами, то файли повиннібути описані в програмі чи явно в розділі змінних VAR, або звикористанням розділу типів TYPE. Оголошення файлів у розділі змінноїмає вигляд: p>
VAR назва файлу: FILE OF базовий тип;
*** p>
VAR p>
FT: FILE OF CHAR; (* файл символьних даних *) p>
FINP: FILE OF REAL; (* файл дійсних даних * ) p>
M: FILE OF INTEGER; (* файл цілих даних *) p>
Файли символьних даних називають текстовими файлами. Опис текстовогофайлу p>
FILE OF CHAR p>
еквівалентно опису TEXT. Тому в попередньому прикладі текстовий файл FTможна оголосити у вигляді: p>
VAR FT: TEXT; p>
Як було зазначено раніше, визначення даних з виключенням розділу описутипів TYPE робить програму більш універсальною і спрощує налагодженняпрограми. Оголошення файлів у цьому випадку має вигляд: p>
TYPE ім'я типу = FILE OF базовий тип; p>
VAR назва файлу: ім'я типу;
*** Для текстового файлу FT опис має вигляд: p>
TYPE T = FILE OF CHAR; p>
VAR FT: T;
Тут Т - введений тип даних. P>
Розглянемо основні 3 види взаємодії програми з зовнішніми файлами:читання файлу, запис файлу, читання і запис. p>
Читання файлу.
Під читанням файлу розуміється введення даних із зовнішнього файлу, що знаходиться надиску в оперативну пам'ять машини. Дані зовнішнього файлу стаютьдоступними програмі. p>
У програмі необхідно виконати наступні дії для читання файлу:відкрити файл для читання (RESET), ввести дані файлу в програму ( `READ),закрити файл для читання (CLOSE). p>
Зовнішній файл, з якого читаються дані, часто називають вхіднимфайлом.
Загальна форма читання файлу має вигляд: p>
RESET (ім'я 1); p>
. . . p>
READ (ім'я 1, параметри); p>
. . . p>
CLOSE (ім'я 1);
Многоточие відзначена наявність будь-яких операторів програми. P>
У деяких версіях PASCAL (в ДВК) оператор RESET може матикілька аргументів: p>
RESET (ім'я в 1, а ім'я 2; ім'я 3; ім'я 4). p>
Тут ім'я 1 - файлова змінна, яка в програмі описана якфайл. Вона встановлює зв'язок з фізичною ім'ям файлу, а ім'я 2 --фізична (конкретне) ім'я файлу, який зберігається на диску, а ім'я 3 --розширення фізичної імені файлу. Можна вказувати будь-які 3 символи, однакрекомендується вказувати DAT (дані). Аргумент можна не вказувати, тоді позамовчуванням буде DAT, а ім'я 4 - змінна, яка автоматично отримуєзначення, яка дорівнює кількості блоків, які займає зовнішнім файлом на диску. Аргументможна не вказувати, але якщо він вказаний, то потрібно оголосити змінну якцілого типу. p>
Оператор вводу для читання файлу має всі властивості звичайногооператора введення READ. Як параметри можуть бути змінні, кожназмінна отримує значення одного елемента, який вважає із зовнішнього файлу.
Змінні повинні бути описані в програмі відповідно до свого типу. P>
Оскільки за визначенням число елементів файлу не задається, то в PASKALeвведений ознака кінця файлу. Стандартна вбудована функція EOF (назва файлу)виповнюється для визначення, чи досягнуто кінець файлу, і помилкове
- В іншому випадку. P>
Функцію EOF можна використовувати в логічному вираженні зокрема, воперації циклу, наприклад: p>
WHILE NOT EOF (F1) DO p>
BEGIN. . . p>
END p>
Ще не досягнуто кінець файлу F1, повторюється циклічна частина програми,укладена в операторні дужки begin-end. p>
Елементи у файлі зберігаються за рядками. Для визначення кінця рядкафайлу використовується оператор циклу: p>
WHILE NOT EOLN (ім'я 1) DO,а для переходу на новий рядок файлу - оператор READLN (ім'я 1).
*** 1.1. Нехай на диску є файл з ім'ям D1.DAT, в якому записанапослідовність дійсних чисел у кількох рядках: p>
0.54 1.7 4.56 0.2 p>
1.32 1.524 18 0.92 p>
56. 7.7
Необхідно зробити ці дані доступними програмі і обчислити їх суму. P>
Program A21 (INPUT, OUTPUT);
VAR
F1: TEXT; (* файлова мінлива *)
L1: Integer; (* довжина файлу *)
X; Real; (* число *)
SUM: Real; (* сума *)
Begin p>
SUM: = 0; p>
RESET (F1; D1; DAT; L1) p>
WHILE NOT EOF (F1) DO
Begin
WHILE NOT EOLN (F1) DO
Begin
READ (F1, X);
SUM: = SUM + Xend;
Readln (F1)end;
WRITE ( 'сума =; SUM: 8:3);
CLOSE (F1)end. p>
Сума = 42.124 p>
У програмі 1.1: F1 - файлова змінна, за допомогою якоївстановлюється зв'язок з файлом D1.DAT. Фізичне назва файлу вказуєтьсятільки при відкритті файлу в операторі RESET. В інших операторів принеобхідності роботи з файлом вказується файлова мінлива F1. Оператор
READ (F1, X) застосовується для зчитування даних (по одному) з зовнішніх файлівв змінної Х. Після оператора CLOSE (F1) дані файлу стаютьнедоступними програмі. Значення обчисленої суми виводиться на екрандисплея. p>
Запис файлу.
Під записом файлу розуміється запис результатів програми з оперативноїпам'яті ЕОМ на диск, тобто створення нового файлу на зовнішньому пристрої. Упрограмі необхідно виконати наступні дії для запису файлу: відкрити файл для запису (REWRITE); вивести дані (WRITE); закрити файл для запису (CLOSE). p>
Зовнішній файл, в якому записуються дані із програми, частоназивають вхідними.
Загальна форма запису файлу:
REWRITE (ім'я 1); p>
. . .
WRITE (ім'я 1, параметри); p>
. . .
CLOSE (ім'я 1);
Оператор виводу для запису даних має всі властивості звичайногооператора WRITE. Якщо оператор виведення має вигляд: p>
WRITE (параметри)
Те дані виводяться на екран дисплея, а якщо p>
WRITE (ім'я 1, параметри)
Те дані записуються у файл, що зберігаються на диску. P>
*** 1.2. Нехай у програмі змінні А і В отримують наступні значення:
А = 510, В = 16.2.потрібно записати у файл з ім'ям D2.DAN рядок у вигляді А = 510 В = 16.2. p>
program A21A (INPUT, OUTPUT); p>
VAR p>
F2 : text; (* файлова мінлива *) p>
L2: Integer; (* довжина вихідного файлу *) p>
A: Integer; (* ціле дане *) p>
B: Real; (* дійсне дане *)
Begin p>
L2: = 1; A: = 510; B: = 16.2; p>
REWRITE (F2, 'D2', 'DAN', L2); p> < p> WRITE (F2, 'A =', A: 3, '': 5, 'B =', B: 4:1); p>
CLOSE (F2)end. p>
Всі значення змінних вказані в коментарях програми. REWRITEвідкриває файл для запису в нього даних. Повна назва файлу - D2.DAN. WRITEвиводить рядок символів відповідно до формату. CLOSE закриває файл длязапису. Оскільки для запису одного рядка цілком достатній 1 блок, тозмінної L2 присвоюємо значення 1. p>
Читання та записфайлу.
Дії файлу можуть бути різноманітними: іноді потрібно читати дані зодного файлу і записувати їх в інші, іноді - коригувати один і тойже файл. У програмі в міру необхідності вказуються оператори для читанняі запису файлів, а також для їх закриття.
*** 1.3.program A22 (INPUT, OUTPUT);
TYPE T = TEXT; (* тип файлу - текстовий *)
VAR p>
T1, T2: T; (* файлова мінлива *) p>
S: CHAR; (* символьне дане *) p>
R: Integer; (* ціле дане *)begin p>
RESET (T1, 'FINP'); (* відкриття файлу для читання *) p>
REWRITE (T2, 'FOUT'); (* відкриття файлу для запису *)
READ (T1, S); (* читання даного з файлу *) p>
. . . . . . . . . . . . . (* дії із змінними S, R *) p>
WRITE (T2, R); (* запис значення R в файл *) p>
CLOSE (T2); (* закриття файлу для запису *) p>
CLOSE (T1); (* закриття файлу для читання *)end. p>
При виконанні послідовних файлів не можна одночасно відкривати один ітой же файл для читання і запису. Якщо з'являється необхідність роботи зодним файлом і для читання, і для запису, то потрібно спочатку відкрити файл,обробити його дані і закрити. Потім відкрити цей же файл заново дляіншої мети, обробити дані і закрити файл. p>
Приклад з використанням зовнішніх файлів:
Маємо відомість за результатами іспиту в групі. Будемо вважати її вхіднимфайлом з ім'ям DAN: p>
-------------------------------------- -----------------предмет "фізика"група Т - 12
-------------------------------------------------- -----< br>Алексєєв С.О. : 5
Вертишев А.Ю. : 4
Колдаев В.Д. : 5
Петрова Н.В. : 4
Федоренко Р.Ф. : 3
Маронін А.В. : 4 p>
Скласти програму створення вхідного файлу з ім'ям REZ, в якому слідзаписати вихідну відомість і обчислений середній бал. p>
----------------------------------- --------------------предмет "фізика"група Т - 12
-------------------------------------------------- -----< br>Алексєєв С.О. : 5
Вертишев А.Ю. : 4
Колдаев В.Д. : 5
Петрова Н.В. : 4
Федоренко Р.Ф. : 3
Маронін А.В. : 4 p>
* * * * * * * * * * * * * * * * * * * * * * * *
Середній бал у групі: 4.17.
Кількість учнів: 6 p>
p>