Продолжаю рассказывать о типах данных в Lazarus. Последняя статья была о множествах. Сегодня о файлах. И, пожалуй, с типами пока закончим. Конечно, их намного больше. Но основных, о которых я уже рассказал, достаточно для знания основ.
Особых отличий при “классической” работе с файлами между Lazarus (Free Pascal) и старым добрым Паскалем нет. Разве что в некоторых случаях (из-за того, что в Lazarus очень много модулей, библиотек и классов с одинаковыми названиями методов) придётся указывать перед методом имя модуля.
Файл - это именованная область внешней памяти компьютера. Имеется ввиду внешней по отношению к выполняемой программе, а не к компьютеру (хотя и это тоже может быть). Файл содержит компоненты одного типа (это может быть как стандартный тип данных, так и пользовательский).
Длина созданного файла не оговаривается, то есть как бы безразмерная. Хотя, конечно, она ограничена возможностями файловой системы и/или размером диска.
В Паскале и всех его наследниках (вроде Delphi или Lazarus) файлы могут быть типизированными и нетипизированными. Примеры объявления файловых переменных:
type TSeasons = (Winter, Spring, Summer, Autum);
var
F1 : file of Integer; //Файл целых чисел
F2 : file of TSeasons; //Файл с данными пользовательского типа
F3 : file; //Просто файл, нетипизированный
F4 : TextFile; //Текстовый файл
F5 : Text; //Тоже текстовый файл
F6 : System.Text; //И это текстовый файл
Чтобы затем работать с файлом, объявленную файловую переменную надо связать с файлом на диске. Сделать это можно так:
Assign(F5, 'F5.txt'); //Связать переменную с файлом
Через первый параметр функции Assign передаётся файловая переменная, а через второй - путь к файлу.
Затем файл надо открыть либо для записи (функция Rewrite), либо для чтения (функция Reset). Потом записываем файл или читаем его. После завершения работы с файлом его надо закрыть. Пример:
Думаю, что из примера всё понятно. Но всё же несколько пояснений сделаю:
- Как вы догадались, связать с файлом переменную достаточно один раз. Впрочем, ту же самую переменную при необходимости потом можно будет связать с другим файлом.
- Процедура WriteLn записывает данные в стандартное устройство вывода. Этим устройством может быть экран (по умолчанию), а может быть и файл. В последнем случае в первый параметр надо передавать файловую переменную. Также можно использовать функцию Write. В этом случае текст будет записываться в одну строку (без перевода строки). Но для нетекстовых файлов в этом и нет необходимости.
- То же касается и процедур Read/ReadLn.
- Функция Eof возвращает TRUE, когда достигнут конец файла. Её можно использовать при переборе содержимого файла в цикле, чтобы понять, когда закончится файл.
- Процедура Rewrite создаёт новый файл на диске по указанному пути. Если такой файл уже существует, то он будет перезаписан. Если вы не хотите перезаписывать файл, и вам надо добавить данные к существующему файлу, используйте процедуру Append, которая открывает файл для добавления данных. Но файл должен существовать. И это работает только с текстовыми файлами.
Вообще про файлы можно рассказывать долго. Здесь главное - вовремя остановиться )))
Несмотря на то, что этой конструкции уже не один десяток лет, я, например, это иногда использую, когда надо быстро что-то сляпать на один раз )))
На этом всё. Подписывайтесь на канал, чтобы ничего не пропустить.