Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Развёрнутые лекции по Паскалю.doc
Скачиваний:
3
Добавлен:
01.03.2025
Размер:
512.51 Кб
Скачать

23.1.Работа с текстовыми файлами

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

Доступ к строкам последовательный. В конце каждой строки ставится

признак конца строки (CR/LF), а в конце файла - признак конца файла

^Z(CTRL-Z). Любую информацию (числовую, символьную, строчную) текс-

товый файл хранит в виде символов, ее изображающих.

->Процедуры:

=>Read(F,V1,V2,...,Vn); - Читает данные из файла в переменные V1...

=>ReadLn(F,V1,V2,...,Vn); - Отличается тем, что при считывании в

строке N переменных, остальные игнори-

руются и указатель переходит на новую

строку файла.

=>Write(F,V1,V2,..,Vn); - Записывает данные в файл из переменных V1.

=>WriteLn(F,V1,V2,...,Vn); - Отличается тем, что после записи N пе-

ременных остальные игнорируются и за-

пись начинается с новой строки.

Примечания:

->При чтении данных из файла необходимо учитывать все правила

ввода значений переменных разных типов с клавиатуры (см.раз-

дел 11.1).

->При записи данных в файл необходимо помнить о пробелах, раз-

деляющих арифметические константы (кроме типа Real без фор-

мата).

->Пустой текстовый файл содержит только символ #26.

->Функции:

=>Eof(F):Boolean; - True, если достигнут конец файла.

=>Eoln(F):Boolean; - True, если достигнут конец строки.

=>SeekEof(F):Boolean; - True, пропускает пробелы, знаки табуляции,

и т.п.

=>SeekEoln(F):Boolean; - True (аналог Eoln, но пропускает пробелы).

Пример 66.

Считывание текстового файла с диска и распечатка на экране.

Uses Crt;

Var Ft:Text;

S,FN:String;

Begin

ClrScr;

WriteLn('Имя текстового файла ? ');

Readln(FN);

Assign(Ft,FN);

Reset(Ft);

ClrScr;

While Not Eof(Ft) Do Begin

Readln(Ft,S);

WriteLn(S);

End;

Close(Ft);

End.

23.2.Работа с файлами без типа

Нетипизированными файлами описываются каналы ввода/вывода низ-

кого уровня, позволяющие осуществить прямой доступ к дисковым фай-

лам вне зависимости от их формата. Пусть F - файловая переменная.

->Процедуры:

=>Seek(F,N); - Передвигает указатель файла на N-ую позицию.

=>BlockRead(F,VarBuf,Count[,VarResult]); - Читает из файла F Count

компонент размера B в буфер VarBuf. Если есть VarResult, то она

принимает значение реально считанных компонент за одно обращение.

Если этой переменной нет, а считано меньше компонент, чем требо-

валось, то возникает ошибка ввода/вывода. Переменная VarBuf долж-

на быть объявлена так, чтобы под нее было зарезервировано B * Co-

unt байт (например массивом).

=>BlockWrite(F,VarBuf,Count[,VarResult]); - Записывает в файл F Co-

unt компонент размера B из буфера VarBuf. Если VarResult не испо-

льзуется, а записано компонент меньше, чем требуется (нет места

на диске), то возникает ошибка ввода/вывода. При использовании

четвертого параметра в нем содержится число реально записанных

компонент.

->Функции:

=>Eof(F):Boolean; - True, если достигнут конец файла.

=>FileSize(F):LongInt; - Для открытого файла определяет размер фай-

ла в компонентах.

=>FilePos(F);LongInt; - Определяет положение указателя в открытом

файле (нумерация компонент идет с нуля).

Пример 67.

Program CopyFile;

Const N=4096;

Var FOut,FIn:File;

Nr,Nw:Word;

Buf:Array[1..N] Of Char;

Begin

Assign(FIn,'NameInFile');

{$I-}

Reset(FIn,1);

{$I+}

If IoResult<>0 Then Exit;

Assign(FOut,'NameOutFile');

Rewrite(FOut,1);

Repeat

BlockRead(FIn,Buf,N,Nr);

BlockWrite(FOut,Buf,Nr,Nw);

Until (Nr=0)Or(Nw<>Nr);

Close(FIn);

Close(FOut);

End.

23.3.Работа с типизированными файлами

Файлы такого типа состоят из однотипных компонент, причем их

количество не оговаривается. Доступ к компонентам ведется через

указатель файла. При чтении и записи этот указатель перемещается к

следующей компоненте. Поскольку все компоненты имеют одинаковую

длину, то возможен произвольный доступ к компонентам файла.

->Процедуры:

=>Read(F,V1,V2,...,Vn); - Читает данные из файла в переменные V1..

=>Write(F,V1,V2,..,Vn); - Записывает данные в файл из переменных V1.

=>Seek(F,N); - Передвигает указатель файла на N-ую позицию.

->Функции:

=>Eof(F):Boolean; - True, если указатель достиг конца файла.

=>FileSize(F):LongInt; - Определяет количество компонент в файле.

=>FilePos(F):Longint; - Определяет номер текущей компоненты.

->Дополнительные процедуры для работы с файлами и каталогами:

=>Truncate(F); - Отсекает (отбрасывает) конец открытого файла от

текущей позиции, т.е. - это частичное стирание.

Пример 68.

Seek(F,K);

Truncate(F); {удаляются все компоненты с номера k+1 в типи-

зированном файле или блоке в безтиповом файле}

=>GetDir(Dr:Byte; Var S:String) - Возвращает текущее имя каталога

на диске Dr.

=>ChDir(S:String) - Устанавливает текущий каталог с именем S.

=>MkDir(S:String) - Создает каталог с именем S (без перехода туда).

=>RmDir(S:String) - Удаляет пустой и не текущий каталог с именем S.

Пример 69.

->ChDir('C:\PASCAL\EXE');

->ChDir('..'); - Выход из подкаталога.

->ChDir('..\TOOLS'); - Выход из текущего с переходом в TOOLS.

->ChDir('\'); - Возврат в корневой каталог.