Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Сборник заданий по T-Pascal.doc
Скачиваний:
64
Добавлен:
18.03.2015
Размер:
3.03 Mб
Скачать

7 Файлы

7.1 Работа с файлами

В Паскале имеются три класса файлов: текстовый файл, типизированный файл и нетипизированный файл. Начнем с текстовых файлов.

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

Текстовый файл содержит последовательность символов, организованных в строки, причем каждая строка заканчивается специальным символом возврата каретки CR#13 и перевода строки LF#10. Заканчивается текстовый файл признаком конца файла. Специальные символы обычно не отображаются программами просмотра текстовых файлов, Работу с текстовыми файлами обеспечивает модуль System Турбо Паскаля, не требующий использования оператора uses.

В Паскале имеется стандартный файловый тип text. Прежде чем приступить к операциям над текстовыми файлами, необходимо ввести переменные (одну или несколько) типа text:

var in_file: Text;

Переменная in_f1le сопоставляется внешнему файлу на диске или какому-нибудь устройству процедурой Assign:

Assign(in_fi1e. 'C:\user\Newton\my_file'):

Assign(my_text. 'prn'):

Процедура Assign связывает имя внешнего файла с файловой переменной. Внешний файл может быть обычным файлом, расположенным на жестком диске, компьютера, но это может быть и файл, связанный с каким-либо устройством, например, дисплеем или принтером. Файловая переменная далее используется D программе в качестве параметра процедур работы с файлами.

Следующий шаг заключается в том, что внешний файл надо открыть для записи или чтения из него какой-то информации. При открытии файла выполняются необходимые системные операции, подготавливающие файл к записи или считыванию информации. Текстовый файл my file открывается процедурой Reset(my_file) только для чтения и процедурой Rewrite(my_file) — только дли записи.

При завершении обработки файла программой он должен закрываться. После закрытия файла связанный с ним внешний файл обновляется. Затем файловая переменная может быть связана с другим внешним файлом. Закрывается файл с помощью процедуры Close(my_file).

После того как текстовый файл открыт, с ним можно выполнять определенные действия, и прежде всего это запись в файл и чтение из него. Доступ к текстовому файлу организуется последовательно — это означает, что программа не может в любой момент времени считать из него произвольную порцию информации или произвести запись в произвольное место файла. Любой файл представляет собой линейную последовательность элементов, каждый из которых имеет свой помер. Можно считать, что имеется указатель, который при считывании очередного элемента файла перемещается к следующему элементу (то есть становится ближе к концу файла).

Для чтения из текстового файла или записи в текстовый файл можно использовать процедуры Write, WriteLn, Read и ReadLn, но в качестве первого параметра в этих процедурах должна быть указана файловая переменная:

Read(in_file. а. х):

WriteLn(out file. 'Urgent message!'):

Первая процедура присваивает а и х значения очередных двух элементов из in_file.

Опepaтop вывода допускает описание формата вывода. Если а является выражением целого, булевого или строкового типа, то

WriteLn(a:n);

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

WrIteLn('12345', 3);

приведет к выводу всего символьного значения 12345. Значение n может быть и отрицательным, в этом случае значение записывается в левые n позиций. В том случае, когда а имеет вещественный тип, должны быть описаны два поля формата:

Write(a:10:3);

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

Мы уже знаем, что в Паскале имеются две стандартных файловых переменных текстового типа — Input и Output. Стандартная файловая переменная Input представляет собой доступный только для чтения файл, связанный со стандартным файлом ввода операционной системы (клавиатура). Вторая стандартная файловая переменная Output — это доступный только для записи файл, связанный со стандартным файлом вывода (дисплей). Перед началом выполнения программы DOS эти файлы автоматически открываются. Имя файла в процедурах Read и Write не указывается, если работа ведется со стандартным файлом. При обращениях к стандартным функциям и процедурам ввода/вывода автоматически производится проверка на наличие ошибок. При обнаружении ошибки программа прекращает работу и выводит на экран сообщение. Иногда это неудобно. С помощью директив компилятора {$I+} и {$I-} автоматическую проверку ошибок ввода/вывода можно включить или выключить. Если автоматическая проверка отключена, ошибки ввода/вывода, возникающие при работе программы, не приводят к ее останову. Стандартная функция IOResult возвращает код ошибки. Нулевое значение кода ошибки означает нормальное завершение операции ввода/вывода. В табл. 1 приведены процедуры и функции для работы с файлами (не обязательно текстовыми).

Таблица Процедуры и функции для работы с файлами

Функция

Описание

procedure Append(var f: text)

procedure Assign(var f: String)

procedure BlockRead(var F: File; var Buf; Count: Word)

procedure BlockWrite(var F: File; var Buf; Count: Word)

procedure ChDir(S: String)

procedure Close(var F)

procedure Erase(var F)

function Eof(var F): boolean

function FiTePos(var F): Longlnt

function FileSize(var F): Longlnt

procedure Flush(var F: text)

procedure GetDir(D: Byte: var S: String);

function lOResult: Integer

procedure MkDir(S: String)

procedure Read(var F: text; v1, ...)

procedure Readln(var F: text; v1, ...)

procedure Renane(var F, S)

procedure Reset(var F)

procedure Rewrite(var F)

procedure RMDir(S: String)

function SeekEof(var F: text):

Boolean

function SeekEoln(var F: text):

Boolean

procedure SetTextBuf(var F: Text

var Buf)

procedure Truncate(var F)

procedure Write(var F: text, v1, ...)

Procedure Writeln(var F: text, v1, ...)

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

Связывает внешний файл, имя которого указано в _ строковой константе String, с файловой переменной f

Считывает из нетипизированного файла, связанного с файловой переменной f, одну или несколько записей (их количество задается целочисленным выражением Count) в переменную Buf

Записывает в нетипизированный файл, связанный с файловой переменной f, одну или несколько записей (их количество задается целым выражением Count) из переменной Buf

Выполняет смену текущего каталога на каталог, маршрут к которому указан в текстовой переменной S

Закрывает открытый файл, связанный с файловой переменной F

Стирает внешний файл, связанный с файловой переменной F

Возвращает для файла, связанного с файловой переменной F, состояние End-of-file (конец файла): True — если текущее положение указателя находится в конце файла или файл пустой; False — во всех остальных случаях

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

Возвращает текущий размер файла, связанного с файловой переменной F. Если файл пустой, возвращает нулевое значение. Для текстовых файлов не используется

Сбрасывает буфер текстового файла, связанного с файловой переменной F и открытого для вывода процедурами Rewrite или Append. Это дает гарантию того, что вся информация, записываемая в файл, будет сохранена во внешнем файле. Не влияет на файлы, открытые для ввода

Возвращает текущий каталог на заданном диске. Имя каталога находится в строковой переменной S, а диск задается значением параметра D: 0 — текущий диск; 1 — диск А; 2 — диск В; 3 — диск С и т. д. Если значение, заданное в параметре D, неверное, возвращается результат «X:\»

Возвращает целое значение, являющееся состоянием последней выполненной операции ввода/вывода. Нулевое значение соответствует нормальному завершению операции

Создает подкаталог, имя для которого задается строковой переменной S

Считывает одно или несколько значений из файла, связанного с файловой переменной F, в одну или несколько переменных vl...

To же, что и Read, но выполняет пропуск до начала следующей строки текстового файла

Переименовывает внешний файл, связанный с файловой переменной F, присваивая ему имя, содержащееся в строковой переменной S

Открывает существующий файл, связанный с файловой переменной F. Текущий указатель устанавливается в начало файла. Текстовый файл открывается только для чтения

Создает и открывает новый файл, связанный с файловой переменной F. Если файл с указанным именем уже существует, старый файл будет стерт, а на его месте создается новый пустой файл. Текущий указатель устанавливается в начало файла

Удаляет пустой подкаталог, маршрут которого указан в строковой переменной S

Перемещает текущую позицию в файле, связанном с файловой переменной F, на заданный элемент. Началу файла соответствует нулевое значение N. Для текстовых файлов не используется

Возвращает для текстового файла, связанного с файловой переменной F, состояние «конец файла» Возвращает для текстового файла, связанного с файловой переменной F, состояние «конец строки»

Назначает для текстового файла, связанного с файловой переменной F, буфер ввода-вывода. Никогда не применяется к открытым файлам, поскольку в этом случае возможны потери данных

Усекает размер файла, связанного с файловой переменной F, до текущей позиции. Вся информация после текущего положения указателя теряется. Для текстовых файлов не используется

Записывает в файл, связанный с файловой переменной F, одно или несколько значений, хранящихся в переменных vl... Файловая переменная может быть связана не только с текстовым файлом. В случае текстового файла значения могут иметь целый, вещественный, строковый, символьный или булев типы. В случае типизированного файла тип значений должен совпадать с типом компонентов файла

Делает то же, что Write, но затем записывает в текстовый файл признак конца строки