Assign в паскале что это
Перейти к содержимому

Assign в паскале что это

Assign в паскале что это

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

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

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

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

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

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

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

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

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

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

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

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

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

Pascal | Лекция №9

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

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

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

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

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

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

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

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

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

Поскольку число элементов файла не задается, то последним элементом файла всегда записывается символ конца файла (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. seek (f,N) – функция, позволяющая явно изменить значение текущего указателя, установив его на элемент файла с заданным номером N (N — целочисленное выражение). Данная процедура не выполняет чтения или записи элементов файла, она лишь перемещает указатель к элементу с номером N. (Первый элемент файла имеет номер 0). Вызов процедуры с аргументами seek (f,filesize(f)) установит указатель на конец файла.
  2. filepos (f) – функция, позволяющая определить текущее положение указателя (номер элемента).
  3. filesize (f) – функция, позволяющая определить размер (кол-во элементов) файла f.
  4. eof (f) – функция, возвращающая логическое значение true, если достигнут конец файла.
  • Специальные операции

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

  1. erase (f) – удаляет файл, связанный с файловой переменной f.
  2. rename (f,NewName) – присваивает файлу, связанному с файловой переменной f, новое имя NewName.

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

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

  • Чтение данных из файла

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

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

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

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

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

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

  • Запись данных в файл

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

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

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

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

123

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

123

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 вся информация в файле остается без изменения, курсор устанавливается на первый элемент файла:

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

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

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

  • Описание текстовых файлов

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

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

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

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

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

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

Например, если в файле находится символ 5, то мы можем его считать как char, integer, real, string размером 1. В этом случае они будут занимать: real – 4 байта; integer 2 байта; char – 1 байт; string — 1 байт.

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

Функция:

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

Файлы. Чтение файла, запись данных

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

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

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

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

f: file of real;

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

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

При определении переменной файлового типа также в программе появляется скрытый (неявный) текущий указатель файла. Его назначение – указывать на конкретный элемент файла (обеспечивать доступ к нему).

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

Операции с файловыми переменными включают:

  • установочные и завершающие операции;
  • ввод и вывод;
  • перемещение по файлу;
  • специальные операции.

Создание файла и запись данных в него

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

Процедура rewrite открывает файл в режиме записи, т.е. мы можем вводить данные в файл с помощью процедуры вывода из программы write. Если указанный файл отсутствует на диске, то он будет создан. Если файл существует и содержит данные, то все они будут удалены и заменены в дальнейшем новыми (перезаписаны).

Запись данных в файл – результат выполнения процедуры write (f, c), где f – файловая переменная, а с – выводимый из программы, но вводимый в файл символ.

В конце требуется закрыть файл и «освободить» переменную f. Это делается с помощью процедуры close.

Чтение данных из файла

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

Данные извлекаются «порциями» базового типа. В данном примере – это char (символы).

Чтение данных из файла продолжается до тех пор, пока не будет достигнут конец файла. Функция eof проверяет достигнут ли конец файла, переданного ей в качестве аргумента и, если достигнут, возвращает true. Выражение not eof (f) проверяет обратное – то, что конец файла еще не достигнут.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *