Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
19
Добавлен:
13.03.2016
Размер:
61.44 Кб
Скачать

Примеры программ, работающих с файлами

лекция №16

Пример 1. Сведения об игрушках в текстовом файле x.txt представлены в виде таблицы:

N

название игpушки

миним.

максим.

цена

 

 

возраст

возраст

(руб.)

1

Конструктор "Юность-3"

4

10

70

2

LEGO (конструктор)

3

7

200

3

Кукла

2

5

50

 

 

 

 

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.