Читайте также:
|
|
Рассмотрим несколько типовых задач на обработку текстовых файлов.
1. Чтение числовых данных из файла. Массив данных имеет фиксированную размерность, примем ее равной 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
2. Просмотр любого текстового файла на экране. По заполнении экрана до 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, в данном случае он позволяет не завершать выполнение программы после неверного ввода пользователя.
3. Работаем со "смешанным" файлом данных, строки которого содержат значения разных типов.
Пусть файл 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;
Приведенный пример иллюстрирует, как часто выбор программистом более или менее удобного формата хранения данных влияет на сложность программы.
Дата добавления: 2015-11-16; просмотров: 41 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Общие операции | | | Записи. Бинарные файлы |