Процедуры и функции для текстовых файлов

Тектовые файлы

Стандартная конструкция редактирования файла

Как добиться прямого доступа??

Процедуры и функции для типизированных файлов

1) Procedure read(var f; v1,v2,..,vn); {Позволяет читать из файла данные которые записываются в переменные v1,v2,..,vn}

 

Var f:file of integer;

X:integer;

Begin

Assignfile(f,’1.tst’);

Reset(f);

While not eof(f) do begin

Read(f,x); write(x);

End;

Closefile(f);

End.

{Пока не достигнут конец файла мы считываем из файла f число интежер и выводи на консоль}

2) Procedure write (var f,v1,v2,..,vn) {записывает в файл Ф данные v1,v2,..vn}

 

Var f:file of integer;

X,i:integer;

Begin

Assignfile(f,’1.tst’);

Rewrite(f);

For i:=1 to n do begin

Read(x); write(f,x);

End;

Closefile(f);

End.

{Плохое копирование}

Var fin,fout:file of byte;

B:byte;

Begin

Assignfile (fin,’test.tst’);

Reset(fin);

Assignfile(fout,’test.new’);

Rewrite(fout);

While not eof(fin) do begin

Read(fin,b);

Write(fout,b);

End;

Closefile(fin);

Closefile(fout);

End.

{Возникают проблемы с памятью}

{Просто пример}

Var fch:file of char;

Ch:char;

Begin

Assignfile(fch,’test.tst’);

Reset(fch);

For ch:=’A’ to ‘Z’ do

Write(fch,ch);

Closefile(fch);

End.

3) Function filesize(var f):longint; {Размер файла в компанентах}

4) Function filepos(var f):longint; {Возвращает номер позиции текущей компоненты}

 

For i:=1 to filesize(f) do begin

Read(f,x);

……

End.

5) Procedure seek(var f; n:longint); {Перемещене курсора на указанную позицию. У первого компонента ноль. У последнего Фаилсайз-1}

6) Procedure truncate(var f); {Обрезает фаил с текущей позиции до конца файла}

Seek(f,filesize(f) div 2);

Truncate(f);

Type base=….;{Базовй тип компонентов файла}

Var f:file of base; buf:base;

Begin

Assignfile(f,’test.tst’);

{$I-}

Reset(f);

{$I+}

Ioresult<>0 then begin

Writeln(‘ошибка’); halt(1);

End;

While not eof (f)do begin

Read(f,buf); {Изменение буфера

Buf:=…}

Seek(f,filepos(f)-1);

Write(f,buf);

End;

Closefile;

End.

 

Текстовый файл – в паскале как совокупность строк переменной длины

Доступ к каждой строке возможен только последовательно, начиная с первой

Служебные символы:

1) #13 – cr (carrage return) write(#13); {Переход на начало строки}

2) #10 – lf (line fit) write(#10) {переход на новую стоку}

3) #9 – Ht {Горизонтальная табуляция}

4) #26 – EOF (end of line)

5) #32 – SP {Пробел}

1) Procedure reset(var f) {ОТкрывает}

2) Procedure rewrite (var f) {пЕрезапись}

3) Procedure append (var f)

Var f:text;

Begin

Assigfile(f,’1.txt’);

Append(f);

Write(f,’.’);

Closedile(f);

End.

4) Procedure settextbuf (var f:text; var buf; [size:word {необязательно}]); {Позволяет установить буфер ввода вывода для текстового файла}

Var buffer:array[1..4096] of char;

F:text;

Filename:string;

Assignfile(f,filename);

Settextbuf(f,buffer,4096);

Reset(f);

{Использывать только тогда, когда фаил закрыт}

5) Procedure read(var f,v1);

a. Параметры считывания не могут быть переменные типа Boolean И перечислемого типа

b. Если параметрами считывания являются символы, то при вызове процедуры read выполняется чтение одного символа, и значение символа присваивается v{}. Если указатель файла достиг конца очередной строки то результатом чтения будет символ с кодом 13, а если указатель достигнет конца файла то результатом чтения будет символ с кодом 26

c. Если считывание осуществляется с readln, то после считывания одного символа указатель переставляется за символ EOL, тоесть на начало другой строки

d. При считывание переменных типа string[N] с позиции курсора считывается строка длиной N. При использовании процедуры read, признак EOL не позволит проитать дальше. Обязательно использование процедуры readln;

Var f:text; str:string;

Begin

Assignfile(f,’1.txt’);

Reset(f);

While not eof(f) do begin

Read(f,str);{readln} writeln(str);

End;

Close(f);

End.

e. При считывании числовых данных, процедура read выделяет подстроку которая может быть преобразована в число, вырезая из нее пробелы, символы табуляции, и тому подобное. Если при пропуске пробелов встретится символ eof, то переменная получает значения ноль.

{Считывания массива данных. }

Const n=100;

Var f:text; I:integer;

Mas:array[1..n] of real;

Begin

Assignfile(f,1.txt,);

Reset(f); i:=1;

While not eof (f) and(i<=n) do begin

Read(f,mas[i]); inc(i);

End;

Closefile(f);

End.

6) Procedure write (var f, v1);

Var f:text; ch:char; st:string;

X:integer; r:real;

……………………………………..

Write(f,ch:10);

Write(f,st:100);

Write(f,x:5); write(f,r::8:2);

7) Function EOLN(var f:text):Boolean; {Возвращает ТРУ если указатель стоит на признаке конец строки}

8) Function seekEOF(var f:text):boolean; {Возвращает значение ТРУ если можно достичь конца файла минуя пробелы табуляции и признаки конца строки}

9) Function seekEOLN (var f:text):Boolean; {Возвращает тру если можно достичь конца строки минуя лишь пробелы и символы табуляции}