Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции_Паскал.doc
Скачиваний:
2
Добавлен:
21.09.2019
Размер:
1.21 Mб
Скачать

1. Оголошення файлової змінної і прив'язка до файлу на диску

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

var f: text;

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

Перш ніж працювати з конкретним файлом на диску, файлову змінну варто зв'язати з цим файлом, використовуючи таку процедуру:

assign(TxtFile: text, name: string);

Перший параметр (TxtFile) — файлова змінна, другий — рядок, що містить ім'я файлу на диску. Якщо файл лежить у поточному каталозі, то досить указати тільки його ім'я і розширення, якщо в якому-небудь іншому, то потрібно вказувати шлях до цього файлу, наприклад:

assign(f,'Z:\SCHOOL\text1.txt');

2. Читання даних з файлу

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

Щоб відкрити для читання файл, що був зазначений при виклику assign, потрібно використовувати процедуру

reset(TxtFile: text);

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

Після відкриття файлу можна починати читання даних. Для цього використовуються процедури read і readln, що використовуються в наступному форматі:

read(TxtFile: text, v1: type1, v2: type2, ... vN: typeN);

readln(TxtFile: text, v1: type1, v2: type2, ... vN: typeN);

Перша процедура читає послідовно з файлу значення і поміщає їх у змінні v1, v2, ... v. Після кожного прочитаного значення покажчик файлу зміщується до початку наступного значення. Процедура readln робить те ж саме, після чого переміщує покажчик на початок наступної рядка; readln з одним лише першим параметром переводить покажчик на початок нового рядка. Як параметри для процедур read і readln можна використовувати змінні наступних типів:

  1. цілі: integer, byte, shortint, word, longint;

  2. дійсні: real, single, double, extended, comp;

  3. рядкові (string);

  4. символьні (char).

При читанні рядкових значень з файлу береться вся послідовність символів від позиції покажчика до кінця рядка. Якщо після цього спробувати знову прочитати рядок, то результат буде порожнім рядком ( ' ' ). Якщо спробувати прочитати число, коли покажчик файлу стоїть наприкінці рядка, то буде прочитаний 0.

При читанні чисел read і readln працюють так: спочатку покажчик пропускає всі пробіли і символи табуляції, а потім, знайшовши перший значущий символ, намагається прочитати число. Якщо це неможливо (зустрілася буква чи число записане невірно), то відбудеться помилка.

Приклад використання процедури читання:

var f: text; s: string; n: integer;

...

readln(f,n,s);

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

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

eoln(TxtFile: text): boolean;

eof(TxtFile: text): boolean;

Перша приймає значення true (істина), якщо покажчик стоїть на кінці рядка, друга — те ж саме для кінця файлу.

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

close(TxtFile: text);

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

Приклад 1 (процедури читання). Нехай мається текстовий файл, наприклад програма на Паскалі. Потрібно роздрукувати його вміст на екрані:

program ShowFile;

var f: text;

c: char;

begin

assign(f,'showfile.pas');

reset(f);

while not eof(f) do begin

while not eoln(f) do begin read(f,c); write(c); end;

readln(f);

writeln;

end;

close(f);

readln;

end.