Когда речь идет о работе программы с текстовым файлом, подразумеваются процедуры ввода данных из файла в программу или, наоборот, запись этих данных в файл программой. Для текстового файла допустима простая работа с файлом без особых дополнительных механизмов, которые применяются для работы со специализированными файлами, такими как при загрузке данных из Excel или работе программы с базой данных. Разумеется, Delphi располагает возможностями работать с файлами с использованием компонентов. Но в данной статье рассматривается механизм прямой работы с текстовым файлом без использования дополнительных компонентов.
Итак, в общем виде, работа с файлом заключается в следующих этапах:
1. подключение к файлу – связь с внешним файлом, указание режима подключения;
2. выполнение операций записи в файл или чтения из файла;
3. завершение работы с файлом.
Подключение к файлу
Для связи программы с файлом используется специальная переменная – "Файловая переменная". Объявляется она так же как и любая переменная в Delphi. Тип это переменной может быть File для типизированных (хранящих данные определенного типа) файлов, а можно указать TextFile, что будет означать тип обычного текстового файла. Объявление переменной:
var
f : TextFile;
В исполняемом коде программы выполняется подключение к внешнему файлу:
Команда AssignFile, выполняет связь файловой переменной с внешним файлом. Вторым параметром указывается адрес файла. Он может быть задан относительным или абсолютным. Если указать только имя файла, то программа будет пытаться обнаружить его в той же директории, где она сама и находится. Абсолютный путь указывается от корневого диска:
Использование относительной директории дает возможность не привязываться к конкретным дискам и адресам. Например:
AssignFile(f, ‘datainput.txt’ ); // во вложенной папке относительно директории с программой
AssignFile(f, ‘..input.txt’ ); // на уровень выше директории с программой
AssignFile(f, ‘..datainput.txt’ ); // во вложенной папке на уровень выше директории с программой
После того как выполнено подключение, выполняется процедура, устанавливающая режим работы с файлом. В основном это режим чтения или записи. Эти режимы назначаются процедурами Reset() ( для чтения) и rewrite() (для записи):
* Для команды Rewrite() следует учитывать, что при ее выполнении, она либо создает файл, указанный в файловой переменной, либо если он уже есть перезаписывает файл заново, удаляя старый без какого-то предупреждения.
Любую из указанных команд можно использовать без команды AssignFile(). Для этого достаточно вторым параметром указать путь к файлу. Таким образом, она сразу выполнит привязку файла к файловой переменной и назначит режим работы с этим файлом:
Reset(f, ‘C:myproginput.txt’ ); // чтение
Rewrite(f, ‘C:myproginput.txt’ ); // запись
Операции с файлами
Для чтения из файла, необходимо назначить режим чтения и использовать команду Readln(), которая будет вводить в строковую переменную по одной строке из файла. Затем с этой переменой можно выполнить необходимые действия.
Обычно для загрузки всех строк из файла используется оператор цикла. Для того, чтобы определить, что файл закончился используется функция EOF() (End Of File). Таким образом получается цикл, в котором последовательно в строковую переменную вводятся все строки файла и завершающийся после окончания фала:
while ( not EOF(f)) do begin
Readln(f, s);
end ;
Для записи, назначение режим записи в файл и командой Writeln() производится запись по строкам.
Закрытие файла
По завершении работы с файлами, особенно в случае записи в них данных, необходимо корректно завершить работу с файловой переменной. Это делается для того, чтобы сохранить все внесенные в файл изменения.
Примеры работы с текстовыми файлами в Delphi
Чтение в переменную одного значения из файла:
var
f : TextFile;
s : String;
begin
AssignFile(f, ‘input.txt’ );
Reset(f);
Загрузить все строки файла в компонент Memo:
var
f : TextFile;
s : String;
begin
AssignFile(f, ‘input.txt’ );
Reset(f);
while ( not EOF(f)) do begin
Readln(f, s);
myMemo.Lines.Add(s);
end ;
Следует отметить, что для этой задачи проще воспользоваться командой самого компонента Memo LoadFromFile().
Записать строку в файл:
var
f : TextFile;
begin
AssignFile(f, ‘input.txt’ );
Rewrite(f);
Writeln(f, ‘My text’ );
Записать в текстовый файл все строки из компонента Memo:
var
f : TextFile;
i : Integer;
begin
AssignFile(f, ‘input.txt’ );
Rewrite(f);
for i := 0 to myMemo.Lines.Count – 1 do
Writeln(f, myMemo.Lines[i]);
CloseFile(f);
end ;
Как и для чтения из файла в Memo, так и здесь, имеется специальная команда:
Compiler directives, Directives, Keywords / Types, Variables, Constants / Functions, Procedures
Процедура
1 procedure Write ( Expression1
2 procedure Write ( var FileHandle : TextFile; Expression1
3 procedure Write ( var FileHandle : File; var Value1 <,var Value2 . >) ;
Описание |
Процедура Write запишет отдельную строку данных в файл или консоль.
Используется, чтобы записать строку текста на консоль. Используется, чтобы записать строку текста в текстовый файл с данным указателем FileHandle. Используется, чтобы записать строку данных в двоичный файл с данным указателем FileHandle. Вы должны использовать AssignFile, чтобы связать файл с FileHandle и открыть файл с помощью процедуры Reset или ReWrite перед использованием WriteLn. Запись текста может быть с любыми правильными Выражениями(Expression). Часто они являются строками, но могут быть также выражениями, которые приводят к строкам или числам. После каждого выражения, вы можете добавить опции форматирования: :width ширина поля для строк + чисел Для типизированных двоичных файлов, значения данных Value1, Value2 и т.д., записываются как строки данных в файл. Эти значения должны иметь тот же самый тип, что и файл. |
Примечания |
Вы не можете использовать Write, чтобы записать в двоичный нетипизированный файл (который объявлен как File без последующего указания типа of type).
Чтобы записывать в двоичному файлу, используйте BlockWrite. Write не буферизует записи, так что более эффективно использовать BlockWrite. Write также является директивой Delphi. Она используется с ключевым словом Property. |
Похожие команды |