File (516215), страница 5
Текст из файла (страница 5)
Любой параметр из списка вывода может иметь формат:
<параметр> [: <целое без знака 1> [: < целое без знака 2> ]], где
<целое без знака 1> - если оно присутствует, означает минимальную ширину поля, в которое будет записано символьное представление значения параметра.. Если символьное представление параметра имеет меньшую длину, оно будет дополнено пробелами слева, если же большую длину то <целое без знака 1> игнорируется и выводится необходимое количество символов.
<целое без знака 2> - используется, при его наличии, для указания количества десятичных знаков в дробной чисти вещественного числа. Оно может использоваться только вместе с <целое без знака 1> и только по отношению к выводимому выражению из вещественных типов.
Квадратные скобки означают возможность отсутствия ширины поля вывода. В этом случае параметр выводится вслед за предыдущим без какого либо разделения.
Символы и строки передаются файлу вывода без изменения, но снабжаются пробелами, если указана ширина поля вывода. Логические выражения в зависимости от их значения выводятся строкой TRUE или FALSE. Вещественные числа выводятся в экспоненциальной форме, если не указано <целое без знака 2>, в противном случае выбирается форма представления числа с фиксированной точкой. Если <целое без знака 1> опущен его значение по умолчанию принимается равное 23. При значении <целое без знака 2> равного 0 ни дробная часть числа, ни десятичная точка не выводятся.
Отсутствие файловой переменной означает вывод в стандартный файл OUTPUT.
-
Процедура WRITELN(<файловая переменная >,< список вывода >)>) - обеспечивает вывод информации в текстовый файл или передачу ее на логическое устройство.
Процедура полностью идентична процедуре WRITE, за исключением того, что выводимая строка символов завершается кодами CR и LF. При вызове WRITELN допускается опускать параметр < список вывода >: в этом случае в файл передается маркер EOLN (при выводе на экран это приведет к переводу курсора в начало следующей строки.
-
Функция SEEKEOLN(<файловая переменная >) - логического типа, пропускает все пробелы и знаки табуляции до маркера конца строки EOLN или до первого значащего символа и возвращает TRUE, при обнаружении маркера. Если файловая переменная отсутствует, функция проверяет стандартный файл INPUT.
-
Функция SEEKEOF(<файловая переменная >) логического типа, пропускает все пробелы и знаки табуляции и маркеры конца строки EOLN до маркера конца файла или до первого значащего символа и возвращает TRUE обнаружении маркера. Если файловая переменная отсутствует, функция проверяет стандартный файл INPUT.
-
Процедура APPEND(<файловая переменная >) - предназначена для инициации записи в ранее существовавший текстовый файл для его расширения. При этом указатель файла устанавливается в его конец. Если текстовый файл ранее уже был открыт с помощью RESET или REWRITE, использование процедуры APPEND приведет к закрытию этого файла и и открытию его вновь, но уже для добавления записей. Следует отметить, что процедура применима только к текстовым файлам.
-
Пример 2-10. Использование текстового файла для ввода исходных данных программы.
{Программа ввода информации из текстового файла или с клавиатуры и запись ее в массив записей ; проверка информации путем поиска заданной фамилии и печати данных о найденном студенте}
program ex;
type fam=record
ff:string[20];
year:word;
month:1..12;
day:1..31
end;
var f:array[1..15] of fam; {массив данных о студентах}
fl:text; {текстовый файл с данными о студентах}
n,i:integer;
name,fff:string; {переменные - строки для имен файлов}
key:boolean; {логическая переменная - флажок}
begin
writeln('Введите имя файла исходных данных или пробел');
readln(name); {имя текстового файла}
if name =' ' then
begin {если имя не задано - ввод с клавиатуры}
writeln(' введите данные с клавиатуры по формату: ');
writeln(' фамилия/ввод, год месяц число/ ввод');
n:=1;
readln(f[n].ff,f[n].year,f[n].month,f[n].day);
while not EOF do
begin
n:=n+1;
readln(f[n].ff,f[n].year,f[n].month,f[n].day);
end;
end
else
begin
assign(fl,name); {если имя файла задано - связь файловой переменной с этим файлом}
{$I-} reset(fl);{$I+} { проверка на существование}
if ioresult <> 0 then begin
writeln(' файла с именем ',name,' в директории нет');
halt end;
n:=1;
readln(fl,f[n].ff); {чтение из текстового файла первой записи}
readln(fl,f[n].year,f[n].month,f[n].day);
while not EOF(fl) do {пока не конец файла}
begin
n:=n+1;
readln(fl,f[n].ff); {чтение очередной записи из файла}
readln(fl,f[n].year,f[n].month,f[n].day);
end
end;
writeln('Введите фамилию для поиска');
readln(fff);
i:=1;
key:=false;
while (i<=n) and (not key) do
begin
if f[i].ff=fff then
begin
writeln('Дата рождения тов.',fff,' : ',f[i].year,f[i].month:3,f[i].day:3);
key:=true;
end;
i:=i+1;
end;
if not key then writeln(' Нет данных')
end.
Результат работы программы:
maszap.dat
Введите фамилию для поиска
петров
Дата рождения тов. с фамилией петров : 1978 3 7
-
Пример 2-11. Использование текстового файла для ввода исходных данных и вывода результатов работы программы.
{Программа подсчитывает для нескольких окружностей, заданных радиусом и координатами центра, длину окружности, площадь круга и удаление центра от начала координат. Параметры окружности хранятся в текстовом файле и количество их заранее не известно. Результаты работы программы выводятся в другой текстовый файл. Для расчета характеристик окружности используется процедура. }
program okr(input,output);
var f1,f2:text; {входной и выходной текстовые файлы}
l1:integer;
r,x,y,c,s,l:real;
(* proc krug подсчет параметров круга *)
procedure krug(r,x,y:real; var c,s,l:real );
const pi=3.14;
begin
c:=2*pi*r;
s:=pi*sqr(r);
l:=sqrt(sqr(x)+sqr(y));
end;
(* main programm *)
begin
l1:=1;
assign(f1,'res'); {установить связь с выходным файлом}
assign(f2,'indd.dat'); {установить связь с выходным файлом}
reset(f2); { открыть файл на чтение}
rewrite(f1); { открыть файл на запись}
while not eof(f2) do {пока не конец входного файла}
begin
read(f2,r,x,y); {читать из входного файла}
krug(r,x,y,c,s,l);
{ писать в выходной файл}
writeln(f1,' окружность номер ',l1:3);
writeln( f1,' dlina okr. c=',c:6:2);
writeln( f1,' ploshad kruga s=',s:6:2);
writeln( f1,' udalenie centra l=',l:6:2);
writeln(f1,'-------------------------------');
inc(l1)
end;
close(f1);close(f2); {закрыть оба файла}
end.
Содержание входного файла:
50 30 40
20 5 6
4 7 9
13 35 43
67 45 67
Содержимое выходного файла:
окружность номер 1
dlina okr. c=314.00
ploshad kruga s=7850.00
udalenie centra l= 50.00
-------------------------------
окружность номер 2
dlina okr. c=125.60
ploshad kruga s=1256.00
udalenie centra l= 7.81
-------------------------------
окружность номер 3
dlina okr. c= 25.12
ploshad kruga s= 50.24
udalenie centra l= 11.40
-------------------------------
окружность номер 4
dlina okr. c= 81.64
ploshad kruga s=530.66
udalenie centra l= 55.44
-------------------------------
окружность номер 5
dlina okr. c=420.76
ploshad kruga s=14095.46
udalenie centra l= 80.71
-------------------------------
-
Пример 2-12. Применение одного текстового файла для ввода исходных данных и вывода результатов путем дозаписи информации.
{ программа создает файл, состоящий из целых чисел, которые читаются из текстового файла и пишутся в типизированный. Затем определяется сумма чисел, стоящих на четных местах в файле. Результаты работы дозаписываются в тот текстовый файл, из которого были введены исходные данные}
Program RPS;
Type t=file of integer; {файл целых чисел}
var f1:t; {переменная типа файл целых чисел}
f2:text; {переменная типа текстовый файл}
k,i,l:integer;
s:real;
Begin
Assign(f1,'pr.dat'); {назначить файловой переменной f1 файл pr.dat}
Assign(f2,'pr.rez'); {назначить файловой переменной f2 файл pr.rez}
Rewrite(f1); {открыть файл на запись}
reset(f2); {открыть файл на чтение}
while not eof(f2) do {пока не конец входного файла}
begin
read(f2,l); {читать исходные данные}
write(f1,l); {писать в типизированный файл}
end;
close(f1); {зыкрыть типизированный файл}
reset(f1); {открыть типизированный файл на чтение}
append(f2); {открыть текстовый файл на добавление записей}
writeln(f2,' исходный файл ');
i:=0;
while not eof(f1) do {пока не конец типизированного файла}
begin
read(f1,l); {читать из типизированного файла}
i:=i+1;
if (i mod 5)=0 then writeln(f2,l:4) { писать в текстовый файл}
else write(f2,l:4);
end;
writeln(f2);
writeln(f2,'**********************************');
writeln(f2,' искомые числа файла ');
seek(f1,0); {установить указатель типизированного файла в начало}
i:=1;
s:=0;
k:=0;
while(not eof(f1)) and (i<=filesize(f1)-1) do
begin
seek(f1,i); {установить указатель на очередную компоненту}
read(f1,l); {читать очередную компоненту}
s:=s+l; {добавит компоненту к сумме}
i:=i+2; {перейти к следующей компоненте}
k:=k+1;
if (k mod 5)=0 then writeln(f2,l:4)
else write(f2,l:4);
end;
writeln(f2);
writeln(f2,'**********************************');
writeln(f2,' сумма чисел, стоящих на четных местах в файле равна ',s:8:2);
close(f2); close(f1);
End.
Содержание файла pr.rez до начала программы:
12 3 45 6 23 5 78 8 11 90 6 9
содержание файла pr.rez после окончания программы:
12 3 45 6 23 5 78 8 11 90 6 9
исходный файл
12 3 45 6 23
5 78 8 11 90
6 9 0
**********************************
искомые числа файла
3 6 5 8 90
9
**********************************
сумма чисел, стоящих на четных местах в файле равна 121.00
-
Пример 2-13. Применение логических устройств в работе с текстовыми файлами.
{ Программа распечатывает текстовый файл по страницам на логическое устройство Lst и выдает звуковой сигнал в конце страницы}
program pech;
uses printer; { подключение стандартного модуля для устройства Lst}
var f:text;{ текстовый файл }
c:char;
s: string;
i, { номер строки }