Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
R10_Файл_12.doc
Скачиваний:
3
Добавлен:
22.12.2018
Размер:
253.44 Кб
Скачать

Особливості обробки типізованих файлів даних

Для коректного оголошення файлу треба вказати його вид і, якщо це типізований файл, то ще й тип його елементів. Синтаксис оголошення є різним для різних мов програмування. Для мови Pascal відповідна БНФ-нотаціїя має вигляд:

<оголошення типізованого файлу>::= file of <тип елементів> .

Наприклад,

type

ТPerson = record

fio : string [30];

adres : string [50];

end;

var f : file of ТPerson.

Слід зауважити, що типізована файлова змінна дозволяє здійснювати обмін з файлом даними тільки того типу, що указаний в описі змінної.

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

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

rewrite (<файлова змінна>).

Незалежно від процедури відкриття, файл відкривається і для читання, і для запису:

  • процедура reset у цьому випадку служить для відкриття вже існуючого файлу (у противному випадку виникає помилка);

  • процедура rewrite використовується для створення і відкриття нового файлу; якщо ж файл із таким ім'ям вже існує, то його вміст знищується.

Обробка типізованих файлів у Pascal здійснюється процедурами Read і Write наступного виду:

Read (<файлова змінна>, <список введення>);

Write (<файлова змінна>, <список виведення>),

де <список введення>::=<список виведення>::=<змінна>{, <змінна>}, а елементи списків введення-виведення мають той же тип, що і компоненти файлу.

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

Приклад. Створення типізованого файлу даних.

Нехай є опис:

type

book = record

avtor : string [16];

nazv : string [30]

end;

var

f : file of book;

b : book;

n : 1..100;

name : string [15];

Тоді процедура створення типізованого файлу послідовної дії може бути наступною:

procedure sozd;

begin

writeln ('input file name : '); readln (name);

assign (f, name); {'D:\ bibl.doc'}

rewrite (f);

n := 1;

with b do

while n=1 do

begin

writeln ('input name of author :’); readln (avtor);

writeln ('input name of book :'); readln (nazv);

write (f, b);

writeln ('тo continue an input ? (1(yes) / 0(no)) :'); readln (n);

end;

end.

Особливості обробки текстових файлів даних

БНФ-нотація оголошення текстового файлу в Pascal має вигляд:

<оголошення текстового файлу>::= text .

Наприклад,

var f : text.

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

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

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

append (<файлова змінна>).

Під час обробки текстових файлів допускається тільки один вид операцій - читання або запис:

  • процедура reset відкриває файл тільки для читання;

  • процедура rewrite - створює новий файл і відкриває його в режимі запису;

  • процедура append - відкриває вже існуючий файл для дозапису елементів у кінець файлу.

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

Для текстових файлів існує спеціальний вид операцій читання та запису (Read та Write), який дозволяє зчитувати та записувати значення, тип яких відрізняється від символьного типу char. Такі значення автоматично переводяться у символьне подання і навпаки. Тобто, кожен елемент списку введення-виведення цих процедур може бути змінною типу char, integer, real або string:

  • якщо елемент типу char, то процедури читання зчитують символи списка введення і присвоюють їх відповідним змінним; процедури ж запису записують символи по черзі в рядки файлу;

  • якщо елемент типу string, то процедури читання зчитують усі символи до мітки кінця рядка (не включаючи її) і присвоюють це рядкове значення відповідній змінній; при записі значення змінних по черзі записуються у рядки файлу;

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

Хоча елементами текстових файлів є символи, цей тип файлів відрізняється від типізованих файлів, що містять символи і рядки (типу file of char і file of string). Відмінність полягає у наявності спеціальних символів, якими позначаються кінці рядків. Їх обробка відрізняється від обробки решти символів і задається спеціальними підпрограмами, що не застосовуються до типізованих файлів, а саме, - процедурами ReadLn і WriteLn. Формат даних процедур:

ReadLn (<файлова змінна>, <список введення>) ;

WriteLn (<файлова змінна>, <список виведення>) .

Процедура ReadLn забезпечує ті ж дії, що і Read, але після цього покажчик файлу переходить до нового рядка файлу. Отже, якщо треба організувати введення даних загальним потоком з одного рядка - використовується процедура Read; з різних рядків - ReadLn. Процедура WriteLn, на відміну від Write, забезпечує запис даних у файл із встановленням маркера кінця рядка. Допускається форматоване збереження даних. Формат виклику процедури Write у цьому випадку має вид:

Write (<файлова змінна>, <вираз_1> [:<ширина поля> [:<кількість цифр>], ..., <вираз_n> [:<ширина поля> [:<кількість цифр>] ].

Є дві стандартні файлові змінні текстового типу - Input та Output. Input - це файл, доступний тільки для читання, зв'язаний зі стандартним файлом введення ОС (як правило, це клавіатура), а стандартна файлова змінна Output - це файл, доступний тільки для запису, зв'язаний зі стандартним файлом виведення ОС (дисплей монітору).

Приклад. У текстовому файлі через кожні 50 рядків вставити 10 порожніх рядків.

program text_file;

var

j : byte;

f1, f2 : text;

s : string [70];

begin

assign (f1, ‘d: \ book’);

assign (f2, ‘d: \ zz’);

reset (f1);

rewrite (f2);

while not eof (f1) do

begin

j := 1;

repeat

readln (f1, s);

writeln (f2, s);

j := j +1;

until (j > 50) or eof (f1);

if not eof (f1) then

for j := 1 to 10 do writeln (f2);

end;

close (f1);

close (f2);

erase (f1);

rename (f2, ‘d: \ book’);

end.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]