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

21.2 Примеры работы с файлами

Пр. Чтение числовых данных из файла – массив данных имеет фиксированную размерность=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;

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

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