Файлы в Pascal. Понятия файла и файловой переменной. Внешние файлы
Файл – совокупность данных, записанная во внешней памяти под определенным именем.
Файловый тип переменной – структурированный тип, представляет собой совокупность однотипных элементов, количество которых заранее не определено.
- типизированные файлы – файлы, состоящие из компонентов одного типа, число которых заранее не определено;
- безтиповые файлы – файлы, где информация записывается и считывается блоками определенного размера, в них могут храниться данные любого вида и структуры;
- текстовые файлы – файлы, состоящие из любых символов. Они организуются по строкам, каждая из которых заканчивается символом «конец строки». В конце файла ставиться символ «конец файла». Информацию текстового файла можно просмотреть с помощью любого текстового редактора.
- как поименованная область данных на внешнем носители (внешний файл)
- как переменная файлового типа (внутренний файл)
Обработка типизированных файлов.
Стандартные процедуры и функции
— связывает файловую переменную f с физическим файлом, полное имя которого задано в строке x. Установленная связь будет действовать до конца работы программы, или до тех пор, пока не будет сделано переназначение.
После связи файловой переменной с дисковым именем файла нужно открыть файл.
открывает для чтения файл, с которым связана файловая переменная f. После успешного выполнения процедуры Reset файл готов к чтению из него первого элемента.
Если f — типизированный файл, то процедурой reset он открывается для чтения и записи одновременно.
открывает для записи файл и очищает его.
закрывает открытый до этого файл с файловой переменной f. EOF(f) возвращает значение TRUE, когда при чтении достигнут конец файла.
позволяет переименовать физический файл на диске, связанный с файловой переменной f. Переименование возможно после закрытия файла.
уничтожает физический файл на диске, который был связан с файловой переменной f. Файл к моменту вызова процедуры Erase должен быть закрыт.
Чтение из текстового файла
Read(f, список переменных); ReadLn(f, список переменных);
Процедуры читают информацию из файла f в переменные. Способ чтения зависит от типа переменных, стоящих в списке. Отличие ReadLn от Read в том, что в нем после прочтения данных пропускаются все оставшиеся символы в данной строке, включая метку конца строки. Если список переменных отсутствует, то процедура ReadLn(f) пропускает строку при чтении текстового файла.
Запись в текстовый файл
Write(f, список переменных); WriteLn(f, список переменных);
Процедуры записывают информацию в текстовый файл. WriteLn от Write отличается тем, что после записи всех значений из переменных записывает еще и метку конца строки (формируется законченная строка файла).
Файлы в Паскаль. Чтение и запись данных
В большинстве языков программирования, в том числе Pascal, предусмотрены инструменты для сохранения информации на внешних носителях (жесткий диск также относится к внешнему запоминающему устройству), а также ее извлечению (чтению) оттуда.
Данные, хранящиеся на внешних устройствах, организовываются в виде файлов. Под файлом понимается область памяти на внешнем запоминающем устройстве, хранящая (содержащая) определенную информацию. В эту конкретную область памяти можно помещать данные (операции ввода, записи), так и извлекать их оттуда (операции вывода, чтения).
В языке программирования Паскаль для работы с данными, хранящимися в файлах, должны быть определены переменные файлового типа, через которые далее обеспечивается связь между файлом на диске и программой.
Типизированный файл в Паскале интерпретируется как последовательность (список) значений определенного (одного и того же) базового типа. Например, если в файле на диске хранится список вещественных чисел, то переменная в языке Pascal, через которую можно получить к ним доступ, может быть описана так:
Файловый тип определяется служебными словами 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) проверяет обратное – то, что конец файла еще не достигнут.