Пр. Читання числових даних з файлу – масив даних має фіксовану розмірність=5
var f,w:text; a: array [1..5] of integer; i:integer;
begin
assign (f,'data.txt');
reset (f);
for i:=1 to 5 do read (f, a[i]);
close (f);
assign (w, 'result.dat');
rewrite (w);
writeln (w,'Результати:');
for i:=1 to 5 do writeln (w,a[i]:5,sqr(a[i]):5);
close(w); end.
Файл data.txt може бути, наприклад, таким:
1 2 3
4 5
Файл result.dat буде таким:
Результати:
1 1
2 4
3 9
4 16
5 25
Пр.Перегляд будь-якого текстового файлу на екрані. По заповненню екрана до 24 рядків програма робить паузу.
var f:text; s:string; count:integer;
begin
repeat
write ('Уведіть ім'я файлу або 0 для виходу: ');
readln (s);
if s='0' then halt;
assign (f,s);
{$I-}reset (f);{$I+}
if Ioresult<>0 then begin
writeln ('Не можу відкрити файл із іменем ',s);
write ('Натисніть Enter для продовження ->');
readln;
continue; {оператор починає виконання поточного циклу з початку}
end;
count:=1;
while not eof(f) do begin
readln (f,s);
writeln (s);
count:=count+1;
if count=24 then begin
count:=1;
write ('Натисніть Enter для продовження ->');
readln;
end;
end;
write ('Натисніть Enter для нового введення ->');
readln;
close (f);
until false;
end.
Рядок s тут використовується як для введення імені файлу, так і для читання рядка файлу – адже після виконання зв'язування оператором assign ім'я файлу нам більше не потрібно! Зверніть увагу також на оператор continue, у цьому випадку він дозволяє не завершувати виконання програми після невірного введення користувача.
Пр. Працюємо з "змішаним" файлом даних.
Файл data.txt має такий вигляд:
Іванов 2
Петров 1
Сидоров 3
Попів 2
(у рядку - прізвище рабочего й через пробіл – номер ділянки, на якій він працює)
Напишемо програму для виведення прізвищ усіх працівників обраного ділянки й підрахунку їх кількості.
var f:text; s,fam:string; u,uch,p,kol,i:integer;
begin
writeln ('Ділянка?'); read (uch);
assign (f,'data.txt'); reset (f);
kol:=0;
while not eof (f) do begin
readln (f,s);
p:=pos(' ',s);
if p>0 then begin
fam:=copy (s,1,p-1);
delete (s,1,p);
val (s,u,i);
if i<>0 then begin
writeln ('Помилка в числі ',s,' – немає номера ділянки');
halt;
end;
if u=uch then begin {підрахунок робітників на ділянці}
writeln (fam);
kol:=kol+1;
end;
end
else begin
writeln ('Помилка в рядку ',s,' – немає пробілу');
halt;
end;
end;
close (f);
writeln ('kol=',kol);
end.
Більша частина цієї програми присвячена аналізу прочитаної з файлу рядка "змішаних" даних. Програму можна суттєво спростити, змінивши формат вихідних даних – наприклад, на одному рядку файлу може бути набране прізвище, а на іншій – номер ділянки. Тоді основний цикл читання файлу буде виглядати так:
while not eof (f) do begin
readln (f,fam);
readln (f,u);
if (u=uch) then begin
{ . . . }
end;
end;
Наведений приклад ілюструє, як часто вибір програмістом більш-менш зручного формату зберігання даних впливає на складність програми.