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

Запис файлу.

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

В програмі необхідно:

1. Відкрити файл для запису,

2. Вивести дані;

3. Закрити файл для запису.

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

Загальна форма запису має наступний вигляд:

Rewrite(імя);

.

.

.

Write(ім’я, параметри);

.

.

.

Close(ім’я);

Оператор виведення для запису даних у файл володіє усіма властивостями звичайного оператору Write. Якщо записано Write(napaм);, то дані виводяться на екран дисплею. А якщо записано Write (ім'я, парам);, то дані записуються у файл, який зберігається на диску. Rewrite в деяких версіях має ті ж параметри, що й Reset.

Приклад: дано type рядок = array [1..100] of char;

Текст=file of char;

Описати процедуру цифри (s,t), яка записує у текст t всі цифри з рядку s.

Procedure цифри (var t: text; s:рядок);

Var і: integer;

Begin

Rewrite (t);

For i:=1 to 100 do

If s[i] in [‘0’..’9’] then

Write(t,s[i]) ;

Close(t);

End;

Приклад: a=150; b=12.6. Записати у файл dl.dat рядок у вигляді:

а=150_ _ _ _ _b=12.6

program рr;

type k:file of real;

var s:k;

a, b: real;

12: integer;

chislo:real;

begin

12: =1;

Write(‘Введіть a і b’);

readln(a ,b) ;

rewrite(s, ‘dl, ‘dat’, 12);

write(s, ‘a=’',а:5,_:5, b= ‘, b:4:1);

close (s);

end.

Оператор Rewrite відкриває файл для запису в нього даних, так як для запису одного рядку цілком досить одного блоку, то змінній 12 присвоюється значення рівне 1 (1блок=256 байтів).

Читання та запис файлів.

Над файлами можна виконувати різні дії. Іноді необхідно читати з одного

файлу, а записувати в другий.

Наприклад:

Дані вводяться із файла (f1) та виводяться в файл (f2). Змінна х приймає значення одного символу із файла. Значення деякої змінної y записується в файл (f2).

Program k1;

Type f=Text;

Var f1, f2:f;;

x,y:char;

begin

reset (f1);

rewrite(f2);

read(f1,x);

.

. {дії над змінними х та у}

.

write(f2,y);

close (f2);

close(f1);

end.

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

Задача: Є відомість результатів екзаменів у групі. Будемо вважати її вхідним файлом з ім'ям kol. Скласти програму створення вихідного файлу з ім'ям rez, в який потрібно записати вихідну відомість і обчислити середній бал.

Прізвище

Оцінка

Іванов

Пєтров Сідоров

:5

:4

:3

Середній бал

:4

Кіл. студентів

:3

Program ABC;

Var f1,f2: text; {файлові змінні}

l1,l2:integer; {кількість блоків}

n: integer; {лічильник кіль кості студентів}

sum:real;

sim: char; {симв. змінна}

с: integer; {оцінка}

sr:real; {середній бал}

Begin

l2: =1; {один блок для f1}

l1:=1;

reset(f1, ‘kol’, ‘pas’, l1);

rewrite (f2,’rez’, ‘pa`s’, l2);

n:=0; sum:=0;

while not eof(fl) do

begin

while not eoln(fl) do

begin

read(fl,sim); {чит. симв. із f1}

write(f2, sim); {запис симв. в f2}

if sim= ‘: then

begin

read(fl,c); {читаєм оцінку iз f1}

write(f2,c:3); {запис оцінки в f2}

sum: =sum+c;

n=n+1;

end;

end;

readln(f1);

writeln(f2);

end;

sr:=sum/n;

writeln(f2, 'cep.6= ', sr:5:2);

witeln(f2, 'кіл-ть cm. = ', n:2);

writeln(f2, 'результат в файлі kol.pas');

close (f2);

close (f1);

end.

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

f1 - файлова змінна;

kol’ - ім'я фізичного вхідного файла;

'pas' — розширення імені kol;

l1 - змінна, що отримує значення в результаті виконання процедури Reset. Це значення = числу блоків які займає вхідний файл kol на диску. Потім визивається процедура Rewrite з параметрами:

f2 - вихідний файл;

'rez' - ім'я фізичного вихідного файлу;

'pas' - розширення;

l2 - змінна, що резервує кількість блоків на диску для вихідного файлу.

Вхідний файл являє собою послідовність рядків. Читання, обробка та запис відомості виконується за допомогою складного циклу: зовнішнього, в якому виконується перевірка на кінець файлу даних та внутрішнього, в якому виконується перевірка на кінець поточного рядка файла. Зовнішній цикл буде виконуватись до тих пір, поки не досягне кінця файлу. Внутрішній цикл використовується для обробки символів в рядку. Стандартна функція EOLN визначає кінець поточного рядка. Внутрішній цикл виконується до тих пір, поки не будуть прочитані всі символи рядка. У внутрішньому циклі зчитують поточний символ із вхідного файлу в символьну змінну sim та записують його в вихідний файл. При цьому, якщо поточний символ =:, то наступний символ оцінка зчитується в цілочислену змінну с та сумується. В зовнішньому циклі Readln(f1) означає перехід на наступний рядок вхідного файлу, а Writeln(f2) - перехід на новий рядок в вихідному файлі. Після закінчення обробки всього файлу обчислюється середній бал і одержані результати виводяться в вихідний файл.

Приклад: Дано: Туре серія=Filе of real;

Описати функцію, яка підраховує суму від'ємних чисел елементів серії S.

program fa 1;

function summa:real;

type ser=file of real;

var s:ser;

a: array[1..10] of real;

sum: real; i: integer;

begin

assign(s, 'c: \text.txt');

rewrite (s);

writeln('введіть числа');

for i: =1 to 10 do

begin

read(a[i]);

write(s,a[i]);

end;

close(s);

reset(s);

sum: =0;

while not eof(s) do

begin

read(s,a[i]);

if a[i]<0 then sum: =sum+a[i];

end;

summa: =sum;

close(s);

end;

begin

write (summa: 3:1);

end.