
- •Примеры программ, работающих с файлами
- •Пример 1. Сведения об игрушках в текстовом файле x.txt представлены в виде таблицы:
- •Program PrimerTextFile;
- •Пример 2: строка таблицы – запись: проще обработка, но разрушается вид таблицы
- •Пример 3. Обработка матриц с использованием файлов.
- •Пример 4. Типизированный файл исходных данных не подготовишь в текстовом редакторе, для его
- •Пример 5: из типизированного файла х в типизиpованный файл y записываются сведения о
- •Пример 6: типизированный файл нельзя прочитать в
Примеры программ, работающих с файлами
лекция №16

Пример 1. Сведения об игрушках в текстовом файле x.txt представлены в виде таблицы:
N |
название игpушки |
миним. |
максим. |
цена |
|
|
возраст |
возраст |
(руб.) |
1 |
Конструктор "Юность-3" |
4 |
10 |
70 |
2 |
LEGO (конструктор) |
3 |
7 |
200 |
3 |
Кукла |
2 |
5 |
50 |
|
|
… |
|
|
2с |
29 символов |
8 симв. |
8 симв. |
8 симв. |
Переписать данные о конструкторах для детей семи лет в текстовый файл y.txt
Program PrimerTextFile;
VAR X,Y: TextFile; N:Integer;{число строк в файле Y} TABL:String[60];{строка таблицы–содержимое столбцов +5 разделителей} name:String[29]; {подстрока-название игрушки}
MinAge,MaxAge:String[8]; {подстроки: мин. и макс. возраст,цена}
MinAR, MaxAR: real; {Макс. и мин. возраст в вещественном представлении} C {номер ошибочного символа при преобразовании строки в число} :Integer; BEGIN
AssignFile(X, ‘d:\student\X.txt‘); Reset(X);
If EOF(X) then
writeln(‘file is empty') {вывод на устройство CON}
Else BEGIN
AssignFile(Y, ‘d:\student\Y.txt‘);
Rewrite(Y); N:=0; Readln(X, TABL);Readln(X, TABL);Readln(X, TABL); Readln(X, TABL);{считывание заголовка}
While not EOF(X) do BEGIN
Readln(X, TABL);
name:=Copy(TABL,5,29); {выделение подстрок названия} MinAge:=Copy(TABL,35,8); {и минимального возраста} Val(MinAge,MinAR,C); {преобразование строка - число }
If C<>0 Then
Writeln(' ошибка в',C,'-й позиции MinAge')
Else Begin
MaxAge:=Copy(TABL,44,8);
Val(MaxAge,MaxAR,C); {преобр-ие строка - число } If C<>0 Then
Writeln(' ошибка в',C,'-й позиции MaxAge')
Else
If ((Pos('констpуктоp',name)>0) or (Pos('Констpуктоp',name)>0)) and (MaxAR>=7)
and (7>=MinAR) Then Begin
N:=N+1; Writeln(Y, TABL);
End
End
END;
If N=0 Then Writeln(‘N=0‘) Else Writeln(‘N>0‘); CloseFile(Y)
END; CloseFile(X); Readln;
END.
Пример 2: строка таблицы – запись: проще обработка, но разрушается вид таблицы
program TextFileZap; Type sved=record
name:string;
minage,maxage:integer;rub:real;
end;
Var x,y:TextFile; toy:sved; N:integer; Begin
AssignFile (x,'d:\student\xtext.txt'); reset(x); {x открывается для чтения} if eof(x) then writeln('x - пустой')
else
Begin N:=0; AssignFile(y,'d:\student\ytext.txt'); rewrite(y); { у открывается для записи} while not eof(x) do
with toy do Begin
readln(x,name); {запись считывается по полям} readln(x,minage,maxage,rub); {считываем все данные об игрушке}
if((pos('Конструктор',name)>0) or pos('конструктор',name)>0)) and (maxage>=7) and (minage<=7) then
begin
writeln(y,name); {запись выводится по полям} writeln(y,minage:8,maxage:8, rub:10:2); N:=N+1
end
End
If N=0 Then Writeln(‘N=0‘) Else Writeln(‘N>0‘); CloseFile(y)
End; CloseFile (x); readln;
End.
Пример 3. Обработка матриц с использованием файлов.
Program matr_file;
Var a: array [1..10,1..10] of real; n, m: integer; fin, fout: text; i, j: integer;
Begin
Assign(fin, ‘d:\student\fin.txt’); Reset (fin);
Readln(fin, n,m); for i:=1 to n do
for j:=1 to m do Read(fin,a[i,j]);
Close(fin); {отсутствие этого оператора может быть не замечено} {Далее обработка матрицы a}
Assign(fout, ‘d:\student\fout.txt’);
Rewrite (fout); Writeln(fout, ‘Полученная матрица’); for i:=1 to n do
begin
for j:=1 to m do Write(fout,a[i,j], ‘ ‘);
Writeln(fout)
end;
Close (fout); {если оператор отсутствует, результаты работы в файле не сохранятся}
End.

Файл d:\student\fin.txt
<n> <m>
<a[1,1]> <a[1,2]> … <a[1,m]> <a[2,1]> <a[2,2]> … <a[2,m]>
…
<a[n,1]> <a[n,2]> … <a[n,m]>
Файл d:\student\fout.txt
Полученная матрица <a[1,1]> <a[1,2]> … <a[1,m]> <a[2,1]> <a[2,2]> … <a[2,m]>
…
<a[n,1]> <a[n,2]> … <a[n,m]>
Пример 4. Типизированный файл исходных данных не подготовишь в текстовом редакторе, для его подготовки необходима программа
program texttyp {пpеобpазование текст.файла в типизиpованный}; type sved=record
name:string;minage,maxage:integer;rub:real;
end;
var xtext:TextFile; x:file of sved; toy:sved;
Begin AssignFile (xtext,‘S:\student\x.txt'); AssignFile(x,‘S:\student\x');
{x.txt готовится в текстовом редакторе, х получается программно} reset(xtext);rewrite(x);
if eof(xtext) then writeln(' Исходный текстовый файл пуст') else
Begin
while not eof(xtext) do Begin
with toy do Begin
readln(xtext,name);{из текст. файла запись считывается} readln(xtext,minage,maxage,rub);{по полям}
End;
write(x,toy); {в типиз. файл запись выводится как единое целое} End;
End;
CloseFile(x); CloseFile(xtext); readln;
End.
Пример 5: из типизированного файла х в типизиpованный файл y записываются сведения о констpуктоpах для детей семи лет
program TypFile; Type sved=record
name:string;minage,maxage:integer;rub:real;
end;
Var x,y:file of sved; toy:sved; Begin
AssignFile (x,‘S:\student\x');
AssignFile(y,‘S:\student\y'); reset(x); rewrite(y);
if eof(x) then writeln('x - пустой файл') else
Begin
while not eof(x) do
Begin read(x,toy);{считывается запись полностью} with toy do
if ((pos('констpуктоp',name)>0) or (pos('Констpуктоp',name)>0)) and (minage<=7) and (maxage>=7) then
write(y,toy);
End;
End;
CloseFile(x); CloseFile(y);Readln End.