Для файловой переменной не вызвана процедура assign

Обновлено: 05.07.2024

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

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

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

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

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

Имеются некоторые различия в использовании процедуры Reset при открытии различных типов файлов. В отношении текстовых файлов (тип Text) действие процедуры означает открытие файла только для чтения. Для нетипизированных файлов в описание процедуры добавляется еще один параметр RecSize типа word, который устанавливает длину записи для функций обмена с файлом. Процедура Reset для нетипиапрованного файла имеет вид:

Reset(tvar F: file; RecSize: word);

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

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

Rewrite(var F: file; RecSize: word);

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

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

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

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

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

Rename(var F; NewName : string);

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

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

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

Когда связь с внешним файлом установлена, для подготовки ее к операции ввода или вывода файловая переменная должна быть “открыта”. Существующий файл можно открыть с помощью процедуры Reset, а новый файл можно создать и открыть с помощью процедуры Rewrite. Текстовые файлы, открытые с помощью процедуры Reset доступны только по чтению, а текстовые файлы, открытые с помощью процедуры Rewrite, доступны только по записи. Типизированные и нетипизированные файлы всегда допускают как чтение, так и запись,независимо от того были они открыты с помощью процедуры Reset или с помощью процедуры Rewrite.

Когда начинается выполнение программы, всегда автоматически открываются стандартные текстовые файловые переменные Input и Оutput (ввод и вывод). Input - это доступный только по чтению файл, связанный с клавиатурой, а Оutput - это доступный только по записи файл, связанный с дисплеем.

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

Обычно доступ к файлам организуется последовательно, то есть, когда элемент считывается с помощью стандартной процедуры Read или записывается с помощью стандартной процедуры Write, текущая позиция файла перемещается к следующему по порядку элементу файла. Однако к типизированным и нетипизированным файлам можно организовать прямой доступ с помощью стандартной процедуры Sееk, которая перемещает текущую позицию файла к заданному элементу. Для определения текущей позиции в файле и текущего размера файла можно использовать стандартные функции FileРоs и Filesize.

Когда программа завершает обработку файла, он должен закрываться с помощью стандартной процедуры Сlose. После полного закрытия файла связанный с ним внешний файл обновляется. Затем файловая переменная может быть связана с другим внешним файлом.

Общий вид описания файлов:

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

В Турбо-Паскале текстовый тип отличается от символьного типа файла. При открытии текстового файла внешний файл интерпретируется особым образом: считается, что он представляет собой последовательность символов, сгруппированных в строки, где каждая строка заканчивается символом конца строки (end-of-line), который представляет собой символ перевода каретки, за которым возможно следует символ перевода строки.

Для текстовых файлов существует специальный вид операций чтения и записи (read и write), который позволяют вам считывать и записывать значения, тип которых отличается от символьного типа. Такие значения автоматически переводятся в символьное представление и обратно. Например, Read(f,i), где i - переменная целого типа, приведет к считыванию последовательности цифр, интерпретации этой последовательности, как десятичного числа, и сохранению его в i.

Имеются две стандартных переменных текстового типа - это Input и Оutput. Стандартная файловая переменная Input - это доступный только по чтению файл, связанный со стандартным файлом ввода операционной системы (обычно это клавиатура), а стандартная файловая переменная Оutput - это доступный только по записи файл, связанный со стандартным файлом вывода операционной системы (обычно это дисплей). Перед началом выполнения программы файлы Input и Оutput автоматически открываются, как если бы были выполнены следующие операторы:

Аналогично, после завершения работы программы эти файлы автоматически закрываются. Примечание: если программа использует стандартный модуль Сrt, то файлы Input и Оutput не будут по умолчанию относиться к стандартным файлам ввода и вывода.

Для некоторых из стандартных процедур, список которых приведен в данном разделе, не требуется явно указывать в качестве параметра файловую переменную. Если этот параметр опущен, то по умолчанию будут рассматриваться Input или Output, в зависимости от того, будет ли процедура или функция ориентирована на ввод или на вывод. Например, Read(х) соответствует Read(Input,х) и Write(х) соответствует Write(Output,х).

Процедуры

Функции

Процедура Seek

Haзнaчeниe: перемещает текущую позицию в файле к заданному элементу.

Примечания: Параметр f является любой файловой переменно, кроме текстовой, а n представляет собой выражение целого типа.

Текущая позиция в файле f перемещается к элементу с номером n. Номер первого элемента файла равен 0. Для того, чтобы расширить файл, можно выполнить поиск элемента файла, расположенного за последним элементом. Ограничения: Процедуру нельзя использовать для текстовых файлов. Файл должен быть открыт.

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

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

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

По историческим причинам принимаемая по умолчанию длина записи равна 128 байтам. Предпочтительной длиной записи является длина записи, равная 1, поскольку это единственное значение, которое позволяет точно отразить размер любого файла (когда длина записи равна 1, то в файле не могут присутствовать неполные записи, то есть записи с меньшей длиной).

За исключением процедур Read и Write для всех нетипизированных файлов допускается использование любой стандартной процедуры, которые допускается использовать с типизированными файлами. Вместо процедур Read и Write здесь используются соответственно процедуры Blockrеаd и BlockWrite позволяющие пересылать данные с высокой скоростью.

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

Процедура Аppеnd

Haзнaчeниe: Открывает текущий файл для присоединения.

Тип результата: Параметр f - текстовая файловая переменная, которая должна быть связана с внешним файлом с помощью процедуры Аssign. Процедура Аppеnd открывает существующий внешний файл с именем, назначенным переменной f. Если внешнего файла с указанным именем не существует, то это является ошибкой. Если файл f уже открыт, то он сначала закрывается, а затем открывается заново. Текущая позиция устанавливается на конец файла. Если в последнем блоке файла размером 128 байтов присутствует Сtrl-Z (26 в коде АSСII), то текущая позиция устанавливается в файле таким образом, что при записи первым будет перекрываться символ Сtrl-Z в блоке. Если переменной f было присвоено пустое имя (например, Аssign(f,’’), то после обращения к процедуре Аppеnd f будет указывать на стандартный выходной файл (стандартный канал номер 1). После обращения к Аppеnd f становится доступным только по записи и Еоf(f) всегда принимает значение Тruе.

Процедура Аssign

Haзнaчeниe: присваивает имя внешнего файла файловой переменной.

Примечания: f является файловой переменой любого файлового типа, а “имя” должно представлять собой выражение строкового типа. Дaльнейшие операции с f будут выполняться с внешним файлом с именем, заданным параметром “имя”. После обращения к процедуре Аssign связь, установленная между переменной f и внешним файлом будет существовать до тех пор, пока не будет выполнена другая процедура Аssign для переменной f. Имя состоит из маршрута (пути доступа), определяющего доступ к 0 или более каталогов, имена которых отделены друг от друга с помощью обратной косой черты и за которыми следует действительное имя файла:

Если путь доступа начинается с обратной косой черты, то поиск начинается в корневом каталоге, в противном сучае он начинается в текущем каталоге. “Диск” представляет собой идентификатор диска (А -Z). Если “Диск” и двоеточие будут опущены, то используется назначенный по умолчанию дисковод. “\имя-кат\имя-кат-\. \имя-кат” является корневым каталогом и путем доступа к подкаталогу, в котором содержится имя файла. “имя-файла” может содержать до восьми символов, за которыми могут следовать точка и расширение имени файла, длиной до трех символов. Максимально допустимая длина всего имени файла составляет 79 символов.

Ограничения: Процедура Аssign не должна использоваться для открытого файла. Когда “имя” представляет собой пустую строку, возникает особый случай, то есть Length(имя) равно нулю. В этом случае параметр f становится связанным со стандартным файлом ввода или стандартным файлом вывода. Эти специальные файлы позволяют инициализировать средство изменения направления ввода-вывода операционной системы ДОС. Если присвоено пустое имя, то после обращения к Rеset(f) f будет указывать на стандартный файл ввода, а после обращения к Rеwritе(f) f будет указывать на стандартный файл вывода.

Пример: (Делается попытка назначить для вывода программы вместо ДОС устройство РRN, диск и т.д.)

Функция Еоf (типизированные и нетипизованные файлы)

Haзнaчeниe: Для типизированных или нетипизированных файлов возвращает состояние “конец файла”.

Тип результата: Булевский (boolean).

Примечания: Параметр f представляет собой файловую переменную. Если текущая позиция в файле находится за последним элементом файла или если файл не содержит никаких элементов, то функция Еоf(f) возвращает значение Тruе. В противном случае она возвращает значение False.

Функция Еоf (текстовые файлы)

Haзнaчeниe: Возвращает состояние “конец файла” для текстовых файлов.

Тип результата: Булевский.

Примечания: Параметр f представляет собой файловую переменную, определяющую текстовый файл. Если этот параметр опущен, то используется стандартная файловая переменная Input. Если текущая позиция в файле находится за последним элементом файла или если файл не содержит никаких элементов, то функция Еоf(f) возвращает значение Тruе. В противном случае она возвращает значение False.

Функция Eoln

Haзнaчeниe: Пpoвepяeт, дocтигнут ли конец строки в файле.

Tип результата: логический (boolean).

Зaмeчaния: f, если указана, является файловой переменной типа text. Если f опущена, то подразумевается cтaндapтнaя файловая переменная Input. Eoln(f) возвращает True, если текущая позиция в файле совпадает с маркером конца строки или если истинна функция Eof(f); в противном случае Eoln(f) возвращает False.

Пpи применении Eoln к стандартному входному устройству (Input), которое не было переопределено , нижеописанная программа будет ожидать ввода, возврата каретки (CR),прежде чем вернуться из вызова функции Eoln:

Процедура Еrase

Haзнaчeниe: Стирает внешний файл.

Примечания: Параметр f представляет собой файловую перемененную любого файлового типа. Внешний файл, связанный с переменной f, стирается.

Ограничения: Процедура Еrase не должна использоваться для открытого файла.

Функция FilePos

Haзнaчeниe: Возвращает текущую позицию в файле.

Тип результата: Длинный целый (longint).

Примечания: Параметр f представляет собой файловую переменную. Если текущей позицией является начало файла, то функция FilePos(f) возвращает значение 0. Если текущей позицией в файле является конец файла, то есть Еоf(f) возвращает значение Тruе, то значение, возвращаемое функцией FilePos(f), совпадает со значением, возвращаемым функцией FileSizе(f) (размером файла).

Функция FileSize

Haзнaчeниe: Возвращает текущий размер файла.

Тип результата: Длинный целый (longint).

Примечания: Параметр f представляет собой файловую переменную. Данная функция возвращает число элементов в f. Если файл пуст, функция возвращает значение 0.

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

Процедура FSplit

Haзнaчeниe: Разбивает имя фaйлa на три его компонента.

Зaмeчaния: Разбивает имя фaйлa, указанное пapaмeтpoм Path на три его компонента. Пapaмeтp Dir становится равен имени накопителя и маршруту с возможными предшествующими и последующими символами ‘\’, Name—имени фaйлa, а Ext -- pacшиpeнию фaйлa с предшествующей точкой.

Каждая из cтpoк - кoмпoнeнт может оказаться пустой, если Path не содержит соответствующего компонента. типы PathStr, DirStr, NameStr и ExtStr определены в стандартном модуле DOS следующим образом:

Процедура FSplit никогда не добавляет и не удаляет символы при разбиении имени фaйлa, и сцепление результирующих строк Dir, Name и Ext всегда окажется равным строке, указанной в параметре Path.

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

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

1. Процедура Assign служит для установления связи между файлом и файловой переменной. Может оказаться, что в программе нужно организовать работу одновременно с несколькими файлами. Естественно, в этом случае описываются несколько файловых переменных. Установкой соответствия между файлом и файловой переменной как раз "занимается" данная процедура. Ее общий вид:

Например, после выполнения следующей конструкции: Assign(k,'PR.DAT'); переменная k будет "связана" с файлом PR.DAT , то есть, указывая имя этой переменной, мы будем осуществлять работу с файлом PR.DAT .

2. Процедура Reset открывает файл для работы, то есть элементы файла становятся доступными программе. После выполнения процедуры Assign программа не может обращаться к элементам файла: они для нее еще "закрыты". Для "открытия" файлов как раз используется указанная процедура. Ее общий вид:

Например, после выполнения конструкции Reset (k); открывается файл PR.DAT (с учетом результата выполнения процедуры Assign ).

3. Процедура Rewrite также открывает файл для работы (для чтения/записи элементов). Зачем еще одна аналогичная процедура? Чем она отличается от предыдущей?

Например, после выполнения конструкции Rewrite (k); пересоздаётся файл PR.DAT (с учетом результата выполнения процедуры Assign ).

4. Процедура Close предназначена для закрытия файлов, то есть она "запирает" файл, и его элементы становятся недоступными программе. Общий вид этой процедуры:

Например, после выполнения процедуры Close(k); элементы файла PR.DAT становятся недоступными программе.

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

На следующем шаге после изучения процедур ввода/вывода информации мы продемонстрируем использование рассмотренных на этом шаге процедур.

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

  • как поименованная информация на внешнем устройстве (внешний файл);
  • как переменная файлового типа в Паскаль-программе (внутренний файл).

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

Файловый тип переменной – это структурированный тип, представляющий собой совокупность однотипных элементов, количество которых заранее (до исполнения программы) не определено.

Для работы с файлом при описании переменных необходимо определить переменную файлового типа, которая будет считаться «представителем» этого файла в данной программе. Такая переменная называется также указателем. Структура описания файловой переменной:

В качестве базового типа можно использовать любой тип, за исключением типа File.

Файл можно представить как последовательную цепочку элементов (эл.), пронумерованных от 0, заканчивающуюся специальным кодом, называемым маркером конца (<м.к.>, <eof>):

123

Количество элементов, хранящихся в данный момент в файле, называется его текущей длиной. Существует специальная ячейка памяти, которая хранит адрес элемента файла, предназначенного для текущей обработки (записи или чтения). Этот адрес называется указателем или окном файла. Указатель всегда указывает на конкретный элемент файла, поэтому существует понятие текущий указатель.

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

Поскольку число элементов файла не задается, то последним элементом файла всегда записывается символ конца файла (eof). В языке Паскаль существует булевская функция eof(<файловая переменная>), результат которой – true, если указатель указывает на конец файла.

Основные операции с файлами

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

  1. assign (f,FileName) – связывает файловую переменную f с конкретным файлом с именем FileName. Данную процедуру необходимо использовать до начала работы с файлом. FileName – выражение строкового типа вида:

Диск: \ имя каталога \ имя подкаталога \ … \ имя файла

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

  1. reset (f) – открывает файл f для чтения, т.е. указатель устанавливается на первый элемент файла. Предполагается, что открываемый файл уже существует, в противном случае возникает ошибка.
  2. rewrite (f) – открывает файл f для записи (указатель так же, как и в предыдущем случае, устанавливается на первый элемент файла). Допускается, что файл не существует, тогда процедура создает файл с заданным именем. Если же такой файл существует, процедура удаляет из него всю информацию. В обоих случаях в результате вызова данной процедуры файловая переменная указывает на нулевой элемент файла (т.е. файл пуст).
  3. close (f) – закрывает файл f для, очищает внутренний буфер, образованный при открытии файла. Теперь указатель f можно связать с другим файлом.
  • Операции ввода-вывода

Это две операции:

  1. read (f,x1,x2, …) – считывает в переменные x1,x2, … по одному элементу из файла f, начиная с той позиции, на которую установлен указатель. Операция чтения осуществляется следующим образом: значение на которое указывает текущий указатель файла, присваивается переменной x1, указатель перемещается на следующую позицию, то же самое выполняется для переменной x2, и т.д. Данная процедура выполнима только в том случае, если не достигнут конец файла (eof(f)=false).
  2. write (f,x1,x2, …) – записывает в файл f значения переменных x1,x2, … , начиная с той позиции, на которую указывает файловая переменная. После записи в файл нового элемента, указатель перемещается на следующую позицию. Данная функция выполнима только в том случае, когда достигнут конец файла (eof(f) =true).
  • Операции перемещения по файлу

В эту группу входят:

Эта группа предназначена для действий с каталогами и именами. Некоторые из операций:

Примеры работы с файлами*

В качестве примеров рассмотрим три наиболее часто встречающихся действия с файлами:

Для чтения файла необходимо выполнить следующий алгоритм:

  1. связать файл с файловой переменной;
  2. открыть файл для чтения;
  3. ввести данные файла в память;
  4. закрыть файл.

Пример программы, реализующей этот алгоритм:

После того, как мы связали файл с файловой переменной с помощью оператора Assign(F,FileName), открываем файл с помощью оператора Reset(F). В результате файловая переменная f указывает на первый элемент файла:

123

С помощью оператора Read(F, Ch) в переменную Ch считывается значение, которое находится в том месте файла, на которое указывает переменная F, т.е. C. Затем указатель перемещается на следующий элемент файла:

123

После этого значение переменной Ch выводится на экран с помощью оператора Write(Ch). Затем аналогичным образом считываются из файла значения 2-го, 3-го и т.д. элементов до тех пор, пока файловая переменная не будет указывать на конец файла.

Алгоритм записи данных в файл можно определить следующим образом:

  1. связать файл с файловой переменной;
  2. открыть файл для записи;
  3. записать данные из программы в файл;
  4. закрыть файл для записи.

Пример программы, реализующей этот алгоритм и записывающей в файл числа от 1 до 30:

При открытии файла с помощью процедуры Rewrite(F) файл выглядит следующим образом:

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

123

Необходимо отметить, что в отличии от вывода на экран, при записи информации в файл вторым аргументом оператора Write являются не выражения, а переменные. Следующие записи будут неверны: Write(F, 1), Write(F, x+1).

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

  1. открыть уже существующий файл с помощью процедуры reset (f);
  2. установить указатель файла на последний элемент с помощью процедуры seek следующим образом: seek(f,filesize(f));
  3. записать дополнительные данные;
  4. закрыть файл.

Пример: к уже имеющемуся файлу, в который занесены числа от 1 до 30, дописать числа 40, 50, 60, 70, 80.

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

123

Затем с помощью операции seek(f, filesize(f)) перемещаем файловую переменную на последний элемент файла:

Так как файловая переменная указывает на конец файла, мы можем дописать в файл любую информацию, например, с помощью оператора Write(f, 31);

123

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

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

Var < имя файловой переменной >: text;

Каждый символ представлен во внутреннем коде (ASCII) и занимает 1 байт.

Главная особенность текстовых файлов заключается в том, что можно считывать из него и записывать в него элементы типа char, integer, real, string, boolean. Если информация несимвольная, то в процессе чтения или записи происходит ее преобразование из символьной формы во внутреннюю и обратно.

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

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

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

Функция:

eoln (f) – логическая функция, возвращающая логическое значение true, если достигнут конец строки, и false в противном случае.

По моему личному наблюдению многие из тех, кто изучает Pascal (насчет других языков сказать не могу), чуть как-то побаиваются работать с файлами. Не понятно, чем это вызвано. На самом деле здесь нет ничего страшного. И чтобы вы это поняли, попробуем изучить этот раздел.

Вообще файлы - очень полезная штука. Например, вы написали какую-то программу, результаты работы которой вам необходимы для дальнейшей работы. Естественно их надо где-то сохранить, оперативная память для этого не подходит (хранит только временную информацию). Самый удобный вариант - это сохранить их в ПЗУ, т.е. в файл. Еще один плюс файлов это то, что вы можете не знать какой объем информации у вас получится, а файл "все стерпит".

И в Pascal'е, как и в любом уважающем себя языке, есть возможность работы с файлами.

Для начала надо сказать, что в Pascal'е все операции с файлами осуществляются через переменные файлового типа. Сами файлы могут быть трех видов: типизированные, не типизированные и текстовые. Объявляются файловые переменные в блоке описания переменных (как и любые другие переменные). Например:

Следует помнить, что не существует "файла файлов" и "файла объектов", т.е. объявления типа

вызовут ошибку компиляции.

В теле программы файловую переменную необходимо связать с конкретным физическим файлом на диске. Делается, это с помощью процедуры Assign. Ее заголовок:

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

Если в качестве параметра FName передать пустую строку, то переменная F будет связана со стандартным устройством ввода (обычно клавиатура) либо со стандартным устройством вывода (обычно дисплей).

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

Начнем по порядку.

Процедура Reset

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

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

RecSize - необязательный параметр, который можно записать только если F - нетипизированная файловая переменная. Этот параметр указывает размер записи, которым будет осуществляться передача данных. Если этот параметр не указан, то длина чтения/записи данных принимается равной 128 байтам. Об этом мы поговорим в последующих выпусках.

Если F была связана с пустой строкой ( Assign(F, '') ), то, открыв ее для чтения, мы свяжем ее со стандартным устройством ввода.

Процедура Rewrite

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

здесь параметры F и Recsize играют ту же роль, что и в процедуре Reset.

Процедура Append

Может быть применена только к текстовому файлу. Ее заголовок:

здесь F - переменная текстового типа. Эта процедура добавляет строки в текстовый файл. Подробней о ней мы поговори мпозже.

Процедура Close

В конце программы, когда вы закончили работу с данным файлом его обязательно надо закрыть. Делается это с помощью процедуры Close. Ее заголовок:

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

В теле программы вы можете несколько раз открыть один и тот же файл несколько раз, а также связывать одну и тужу переменную с разными файлами. Главное не забывать каждый раз закрывать файл.

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

А вот вам программка для практики, не удивляйтесь, если встретите что-то незнакомое, мы все подробно рассмотрим.

Читайте также: