Примеры работы с файлами
Рассмотрим несколько типовых задач на обработку текстовых файлов. 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; Приведенный пример иллюстрирует, как часто выбор программистом более или менее удобного формата хранения данных влияет на сложность программы.
Читайте также: Cхема работы механизма репликации ДНК Воспользуйтесь поиском по сайту: ©2015 - 2025 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|