Когда речь идет о работе программы с текстовым файлом, подразумеваются процедуры ввода данных из файла в программу или, наоборот, запись этих данных в файл программой. Для текстового файла допустима простая работа с файлом без особых дополнительных механизмов, которые применяются для работы со специализированными файлами, такими как при загрузке данных из Excel или работе программы с базой данных. Разумеется, Delphi располагает возможностями работать с файлами с использованием компонентов. Но в данной статье рассматривается механизм прямой работы с текстовым файлом без использования дополнительных компонентов.
Итак, в общем виде, работа с файлом заключается в следующих этапах:
1. подключение к файлу – связь с внешним файлом, указание режима подключения;
2. выполнение операций записи в файл или чтения из файла;
3. завершение работы с файлом.
Для связи программы с файлом используется специальная переменная – "Файловая переменная". Объявляется она так же как и любая переменная в Delphi. Тип это переменной может быть File для типизированных (хранящих данные определенного типа) файлов, а можно указать TextFile, что будет означать тип обычного текстового файла. Объявление переменной:
var
f : TextFile;
В исполняемом коде программы выполняется подключение к внешнему файлу:
AssignFile(f, 'input.txt');
Команда AssignFile, выполняет связь файловой переменной с внешним файлом. Вторым параметром указывается адрес файла. Он может быть задан относительным или абсолютным. Если указать только имя файла, то программа будет пытаться обнаружить его в той же директории, где она сама и находится. Абсолютный путь указывается от корневого диска:
AssignFile(f, 'C:\myprog\input.txt');
Использование относительной директории дает возможность не привязываться к конкретным дискам и адресам. Например:
AssignFile(f, 'data\input.txt'); // во вложенной папке относительно директории с программой
AssignFile(f, '..\input.txt'); // на уровень выше директории с программой
AssignFile(f, '..\data\input.txt'); // во вложенной папке на уровень выше директории с программой
После того как выполнено подключение, выполняется процедура, устанавливающая режим работы с файлом. В основном это режим чтения или записи. Эти режимы назначаются процедурами Reset() ( для чтения) и rewrite() (для записи):
Reset(f);
Rewrite(f);
* Для команды Rewrite() следует учитывать, что при ее выполнении, она либо создает файл, указанный в файловой переменной, либо если он уже есть перезаписывает файл заново, удаляя старый без какого-то предупреждения.
Любую из указанных команд можно использовать без команды AssignFile(). Для этого достаточно вторым параметром указать путь к файлу. Таким образом, она сразу выполнит привязку файла к файловой переменной и назначит режим работы с этим файлом:
Reset(f, 'C:\myprog\input.txt'); // чтение
Rewrite(f, 'C:\myprog\input.txt'); // запись
Для чтения из файла, необходимо назначить режим чтения и использовать команду Readln(), которая будет вводить в строковую переменную по одной строке из файла. Затем с этой переменой можно выполнить необходимые действия.
Readln(f, s);
Обычно для загрузки всех строк из файла используется оператор цикла. Для того, чтобы определить, что файл закончился используется функция EOF() (End Of File). Таким образом получается цикл, в котором последовательно в строковую переменную вводятся все строки файла и завершающийся после окончания фала:
while (not EOF(f)) do begin
Readln(f, s);
end;
Для записи, назначение режим записи в файл и командой Writeln() производится запись по строкам.
Writeln(f, 'text');
По завершении работы с файлами, особенно в случае записи в них данных, необходимо корректно завершить работу с файловой переменной. Это делается для того, чтобы сохранить все внесенные в файл изменения.
CloseFile(f);
Чтение в переменную одного значения из файла:
var
f : TextFile;
s : String;
begin
AssignFile(f, 'input.txt');
Reset(f);
Readln(f, s);
CloseFile(f);
end;
Загрузить все строки файла в компонент 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;
CloseFile(f);
end;
Следует отметить, что для этой задачи проще воспользоваться командой самого компонента Memo LoadFromFile().
myMemo.Lines.LoadFromFile('input.txt');
Записать строку в файл:
var
f : TextFile;
begin
AssignFile(f, 'input.txt');
Rewrite(f);
Writeln(f, 'My text');
CloseFile(f);
end;
Записать в текстовый файл все строки из компонента 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, так и здесь, имеется специальная команда:
myMemo.Lines.SaveToFile('input.txt');
Функция DeleteFile в Delphi, описание и примеры
Математические функции в Delphi
Процедура MkDir в Delphi, описание и примеры
В комментариях запрещено публиковать рекламные материалы. Все сообщения оправляются на модерацию и будут опубликованы, если не нарушают правил сайта после проверки.