Здавалка
Главная | Обратная связь

Средства обработки файлов



Каждому файлу в языке ставится в соответствие файловая переменная, которая должна быть связана с конкретным внешним файлом. Поэтому перед началом работы с файлом необходимо установить данное соответствие. Для этого в языке используется процедура:

Assign(Var F; Name:String);

где F- переменная любого файлового типа, а строковое выражение Name содержит полное имя файла, удовлетворяющее требованиям операционной системы.

Процедура Assign всегда предшествует другим процедурам работы с файлами, так как ставит в соответствие конкретному файлу на внешнем устройстве логическую файловую переменную языка, к которой впоследствии будут обращаться все другие файловые процедуры. Недопустимо использование процедуры Assign для уже открытого файла. Это значит, что если было назначено имя конкретного набора данных файловой переменной с помощью процедуры Assign, а затем этот файл был открыт, то, прежде чем использовать ту же файловую переменную для нового набора данных, необходимо с помощью процедуры Close закрыть этот файл.

Для работы с файлом прежде всего необходимо его открыть. В языке Паскаль предусмотрены для этого две процедуры:

Reset(var F : file ); - открывает существующий файл;

Rewrite(var F : file ); -создает и открывает новый файл.

При описании обеих процедур параметр file означает файловую переменную любого типа. Открытие внешнего файла с помощью процедуры Reset в случае его отсутствия на диске может привести к ошибке при выполнении программы.

Пример1. Стандартное открытие файла

Assign(F, ' ') ;

Reset(F) ;

Процедура Rewrite создает и открывает новый файл. Использование этой процедуры требует особого внимания. При попытке создать и открыть новый файл с именем уже существующего на диске набора данных действие процедуры Rewrite сведется к удалению этого набора и созданию нового пустого файла с тем же именем.

Если процедура Rewrite используется для текстового файла, то к открываемому новому набору данных в дальнейшем могут быть применимы только операции записи.

Операция закрытия файла является логическим окончанием работы с любым открытым файлом. Для этого служит процедура

Close (Var F);

Использование процедуры Close позволяет устранить связь файловой переменной с внешним файлом, установленную с помощью процедуры Assign.

Пример 2. Полная цепочка команд для создания простого текстового файла с именем WORK.TXT:

Var

F: text;

begin

Assign(F, ' WORK. ТХТ') ;

Rewrite(F) ;

Write(F, 'Простой текстовый файл');

Close(F) ;

end.

К языковым средствам обслуживания файлов необходимо отнести процедуры переименования и удаления неоткрытых файлов. Использование этих процедур не зависит от типа файла.

Rename(var F; NewName : string);

Процедура переименовывает неоткрытый файл F любого типа. Новое имя задается строкой NewName. ]

Erase(var F) ;

Процедура удаляет неоткрытый внешний файл любого типа, задаваемый переменной F.

Обе процедуры нельзя использовать для уже открытых файлов. Операции удаления и переименования осуществляются только для реально существующих файлов, иначе возникает ошибка выполнения программы.

Пример 3. Удаление или переименование файла

Var

F: file ;

Ch: char ;

St: string;

begin

Write('Введите имя файла: ');

Readln(St); {Чтение имени}

Assign(F, St); {Назначить имя файловой переменной}

Write('Удалить файл (У), Переименовать(П), Выход(В)');

Readln(Ch) ;

case Ch of

'У ', ' y' : Erase(F); {Удаление файла}

'П','п' : begin

Write('Введите новое имя файла: ');

Readln(St) ;

Rename(F, St); {Переименование файла}

end;

'В','в' : Halt(1);

end;

end.

В приведенном примере альтернативный выбор тех или иных действий зависит целиком от того, что будет введено с клавиатуры. Этот вариант программы не позволяет обработать ошибочные ситуации в случае, если файла с именем St не существует на диске.

Для того чтобы файловые операции выполнялись без ошибок, необходимо использовать специальную функцию IOresult. Функция работает без параметров и возвращает значение типа integer, представляющее статус последней выполненной операции ввода-вывода. Использование этой функции в программах возможно лишь в том случае, если на время выполнения файловых операций отключена стандартная проверка операций ввода-вывода. Для этих целей используется либо специальная опция в интегрированной системе, либо директива компилятора {$I}, которая может задаваться внутри текста программы.

Пример 4. Вариант программы для проверки существования файла на диске

Var

F: file ;

St: string;

begin

Write('Введите имя файла : ');

Readln(St) ;

Assign(F, St) ;

{$I-} {Отключить стандартную обработку ошибок}

Reset(F); {Открыть файл}

{$I+} {Включить стандартную обработку ошибок}

if IOresult = 0 then

begin

Writeln('Файл существует и нормально открыт');

Close(F); {Закрыть файл}

end

else

Writeln('Файла с именем '+St+' на диске нет');

end.

После корректного выполнения операции ввода-вывода функция IOresult возвращает значение, равное нулю, в остальных случаях функция возвращает соответствующий код ошибки.

Рассмотренные операции ввода-вывода охватывают все типы файлов в Турбо Паскале и характеризуют взаимоотношения файловой и операционной систем.

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

Процедуры и функции для работы с любыми файлами Описание
ASSIGN(F,Name) Связь файловой переменной F с внешним файлом Name. Name-переменная или константа типа String,Char. Имя файла должно быть написано в соответствии с правилами DOS. F- переменная любого файлового типа.
RESET(F[,SIZE]) Открытие существующего файла. Открывается существующий файл, с которым связана файловая переменная F и указатель текущего компонента файла перемещается на начало файла. Необязательный параметр SIZE используется только в нетипизированных файлах и задает размер пересылаемого элемента информации в байтах.
REWRITE(F[,SIZE]) Открытие нового пустого файла. Открывается новый пустой файл, и ему присваивается имя, заданное процедурой ASSIGN. Если файл с таким именем уже существует, то он уничтожается. Необязательный параметр SIZE используется только в нетипизированных файлах и задает размер пересылаемого элемента информации в байтах.
ERASE(F) Уничтожение файла. Удаляет неоткрытый внешний файл, задаваемый переменной F.
RENAME (F,NewName) Переименование файла. Переименовывает неоткрытый внешний файл, задаваемый переменной F, новое имя задается строкой NewName.
CLOSE(F) Закрытие файла.
EOF(F) Конец файла.

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

Текстовые файлы представляют собой совокупность символов, разделенных на строки, причем в конце каждой строки стоит признак конца строки. Особенностью работы с текстовыми файлами является то, что параметры, значения которых вводятся и выводятся с помощью процедур READ или WRITE, могут быть не только типа String или Char, но и других типов (целых, вещественных - при вводе, целых, вещественных, логических - при выводе).

При работе с текстовыми файлами необходимо, прежде всего, объявить соответствующую файловую переменную:

Var

F:text;

Начало работы с текстовым файлом - стандартное: файловой переменной ставится в соответствие имя файла (процедура Assign), а затем открывается новый текстовый файл (процедура Rewrite) или открывается существующий текстовый файл (процедура Reset).

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

Процедуры и функции для работы с текстовыми файлами Описание
APPEND(F)     Открытие существующего файла. Открывается существующий файл, с которым связана файловая переменная F и указатель текущего компонента файла перемещается на конец файла. F- переменная любого файлового типа. После открытия текстовый файл можно дополнять информацией, начиная с конца строки.
READ(F,<список>) Чтение из файла.
READLN(F,<список>) Чтение строки из файла.
SETTEXTBUF(F,BUF[,SIZE]) Назначение буфера ввода- вывода. Для файла, с которым связана файловая переменная F, назначается буфер ввода- вывода в виде переменной BUF любого типа.
WRITE(F,<список>) Запись в файл.
WRITELN(F,<список>) Запись строки в файл.
EOLN(F) Коней строки файла.
EOF(F) Конец файла.






©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.