учебник по паскалю. Программа 5 Алгоритм 5 Свойства алгоритма 6 Формы записи алгоритма 6
Скачать 2.21 Mb.
|
21.2. Примеры работы с файламиРассмотрим несколько типовых задач на обработку текстовых файлов. 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; Приведенный пример иллюстрирует, как часто выбор программистом более или менее удобного формата хранения данных влияет на сложность программы. 21.3. Работа с параметрами командной строкиПрограмма в DOS или Windows может запускаться с параметрами командной строки, через которые обычно передают имена файлов или указывают режимы работы программы: turbo.exe vasya.pas — здесь программе Турбо Паскаль передано имя файла vasya.pas; my /s /a — программе с именем my переданы параметры /s и /a. Существует две стандартных функции для работы с параметрами: Paramcount -- вернет общее число параметров командной строки; Paramstr(i) -- вернет строку, содержащую параметр номер i. В качестве примера реализуем программу просмотра текстового файла на экране, которой параметром передается имя нужного файла. var fil:text; name:string; begin if Paramcount<>1 then begin writeln ('Запускайте так: ', 'FILEVIEW имя_файла'); halt; end; assign (fil,Paramstr(1)); reset (fil); while not eof(fil) do begin readln (fil,name); writeln (name); end; end. Второе полезное свойство функции Paramstr -- вызванная из исполняемого файла с аргументом 0, она возвращает полный путь к нему. Из оболочки Турбо Паскаля параметры командной строки можно передать запускаемой программе через пункт Parameters меню Run. |