Чтение и запись файлов в Pascal
Обновлено: 02.02.2026
В большинстве языков программирования, в том числе Pascal, предусмотрена возможность сохранения информации на внешних носителях, а также ее извлечения оттуда. Сохранение данных называют их записью, а получение — чтением. Примером внешнего запоминающего устройства является жесткий диск.
Данные, хранящиеся на внешних устройствах, организовываются в виде файлов. Под файлом понимается область памяти на внешнем запоминающем устройстве, содержащая определенную информацию. В эту конкретную область памяти можно как помещать данные (выполнять операции ввода, записи), так и извлекать их оттуда (операции вывода, чтения).
Для работы с данными, хранящимися в файлах, в программах необходимо определять переменные файлового типа. Через них обеспечивается связь между файлом на диске и программой. Упрощая, сами такие переменные могут называть "файлами".
В языке программирования Паскаль существует несколько разновидностей файловых переменных. Более простыми для понимания являются типизированные файлы. На их основе далее рассмотрим операции чтения и записи.
Типизированный файл в Паскале рассматривается как последовательность значений, которые принадлежат одному и тому же типу. Например, если в файле на диске хранится список вещественных чисел, то переменная в языке Pascal, через которую можно получить к ним доступ, может быть описана так:
f: file of real;
Файловый тип определяется ключевыми словами file of, далее идет указание базового типа, который может быть любым, кроме файлового.
Следует учитывать такую особенность. В файле могут храниться числа, но в программе они могут быть интерпретированы как символы или строки. Все зависит от выбранного базового типа при определении файловой переменной.
При определении переменной файлового типа в программе также появляется неявный текущий указатель файла. Его назначение — указывать на конкретный элемент файла, тем самым обеспечивать доступ к нему.
Чтение и запись файлов производятся поэлементно. Действия совершаются именно над тем элементом файла, на который указывает текущий указатель файла. После того как действие будет завершено, указатель перемещается к следующему элементу. Все элементы файла пронумерованы, начиная с нуля.
Операции с файловыми переменными включают:
- установочные и завершающие операции;
- ввод и вывод;
- перемещение по файлу;
- специальные операции.
Процедура assign обеспечивает связь файловой переменной программы с реальным файлом на диске. Первым аргументом указывается переменная, вторым — адресное имя файла.
После того как работа с файлом заканчивается, его следует закрыть и "освободить" связанную с ним переменную. Это делается с помощью процедуры close.
Запись данных в файл
Процедура rewrite открывает файл в режиме записи, т.е. дает нам возможность вводить данные в файл с помощью процедуры вывода из программы write. Если указанный файл отсутствует на диске, то он будет создан. Если файл существует и содержит данные, то все они будут удалены и заменены в дальнейшем новыми (перезаписаны).
var f: file of char; c: char; i, n: byte; begin assign(f, 'file.txt'); rewrite(f); write('Количество символов: '); readln(n); for i := 1 to n do begin write('Введите символ: '); readln(c); write(f, c); end; close (f); end.
В программе выше запись данных в файл происходит в результате выполнения операции write(f, c), где f — файловая переменная, а с — записываемый в файл символ. Пример выполнения программы:
Количество символов: 4 Введите символ: R Введите символ: b Введите символ: w Введите символ: z
После этого в том же каталоге, где сохранена программа, появится файл file.txt содержащий одну строку из введенных символов: Rbwz.
Чтение данных из файла
Процедура reset открывает файл для чтения и дает возможность в дальнейшем извлекать данные из файла с помощью процедуры read.
Данные извлекаются "порциями" базового типа файловой переменной. Так если это char, то каждый вызов read будет приводить к считыванию одного символа из файла. При этом файловый указатель будет сдвигаться на следующий символ.
Чтение данных из файла продолжается до тех пор, пока не будет достигнут конец файла. Функция eof проверяет достигнут ли конец переданного ей в качестве аргумента файла и, если достигнут, возвращает true. Выражение not eof(f) проверяет обратное — то, что конец файла еще не достигнут.
var f: file of char; c: char; begin assign(f, 'file.txt'); reset(f); while not eof(f) do begin read(f, c); writeln(c); end; close (f); end.
В примере выше если file.txt содержит строку Rbwz, то составляющие ее символы будут в столбик выведены на экран. Если файла не будет существовать, то произойдет ошибка времени выполнения (runtime error).