Файлы в Паскаль. Чтение и запись данных
В большинстве языков программирования, в том числе Pascal, предусмотрены инструменты для сохранения информации на внешних носителях (жесткий диск также относится к внешнему запоминающему устройству), а также ее извлечению (чтению) оттуда.
Данные, хранящиеся на внешних устройствах, организовываются в виде файлов. Под файлом понимается область памяти на внешнем запоминающем устройстве, хранящая (содержащая) определенную информацию. В эту конкретную область памяти можно помещать данные (операции ввода, записи), так и извлекать их оттуда (операции вывода, чтения).
В языке программирования Паскаль для работы с данными, хранящимися в файлах, должны быть определены переменные файлового типа, через которые далее обеспечивается связь между файлом на диске и программой.
Типизированный файл в Паскале интерпретируется как последовательность (список) значений определенного (одного и того же) базового типа. Например, если в файле на диске хранится список вещественных чисел, то переменная в языке Pascal, через которую можно получить к ним доступ, может быть описана так:
f: file of real;
Файловый тип определяется служебными словами file of, далее идет указание базового типа, который может быть любым, кроме файлового.
Тут следует понимать такую особенность. В файле могут храниться числа, но в программе они могут быть интерпретированы как символы или строки. Все зависит от выбранного базового типа при определении файловой переменной.
При определении переменной файлового типа также в программе появляется скрытый (неявный) текущий указатель файла. Его назначение – указывать на конкретный элемент файла (обеспечивать доступ к нему).
В языке программирования Паскаль все действия с файлом (чтение, запись) производятся поэлементно. Действия совершаются именно над тем элементом файла, на который указывает текущий указатель файла. После того как действие будет завершено, указатель перемещается к следующему элементу. Все элементы файла пронумерованы, начиная с нуля.
Операции с файловыми переменными включают:
- установочные и завершающие операции;
- ввод и вывод;
- перемещение по файлу;
- специальные операции.
Создание файла и запись данных в него
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.
Процедура assign обеспечивает связь файловой переменной программы с реальным файлом на диске. Первым аргументом указывается переменная, вторым – адресное имя файла.
Процедура rewrite открывает файл в режиме записи, т.е. мы можем вводить данные в файл с помощью процедуры вывода из программы write. Если указанный файл отсутствует на диске, то он будет создан. Если файл существует и содержит данные, то все они будут удалены и заменены в дальнейшем новыми (перезаписаны).
Запись данных в файл – результат выполнения процедуры write(f, c)
, где f – файловая переменная, а с – выводимый из программы, но вводимый в файл символ.
В конце требуется закрыть файл и "освободить" переменную f. Это делается с помощью процедуры close.
Чтение данных из файла
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.
Процедура reset открывает файл для чтения. Т.е. мы можем в дальнейшем в программе извлекать данные из файла с помощью процедуры read.
Данные извлекаются "порциями" базового типа. В данном примере – это char
(символьный тип).
Чтение данных из файла продолжается до тех пор, пока не будет достигнут конец файла. Функция eof проверяет достигнут ли конец переданного ей в качестве аргумента файла и, если достигнут, возвращает true
. Выражение not eof(f)
проверяет обратное – то, что конец файла еще не достигнут.