СтатьиПрограммирование в Delphi

Создание и работа с текстовыми файлами в Delphi

Когда речь идет о работе программы с текстовым файлом, подразумеваются процедуры ввода данных из файла в программу или, наоборот, запись этих данных в файл программой. Для текстового файла допустима простая работа с файлом без особых дополнительных механизмов, которые применяются для работы со специализированными файлами, такими как при загрузке данных из 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);

Примеры работы с текстовыми файлами в Delphi

Чтение в переменную одного значения из файла:

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');


Комментарии

03.02.2016 00:47 Андрей [гость]
Столкнулся в Windows 7x64, что такая форма записи не работает (в Delphi 10 компилируется, но виснет при запуске, а в Delphi XE6 ошибка при компиляции):
Reset(f, 'C:\myprog\input.txt');
Rewrite(f2, 'C:\myprog\input2.txt');

Работает только такая:
AssignFile(f, 'C:\myprog\input.txt');
Reset(f);
AssignFile(f2, 'C:\myprog\input2.txt');
Rewrite(f2);

Т.е. считаю, что лучше всё же использовать AssignFile перед работой с файлами, т.к. этот вариант более универсальный.
03.02.2016 11:07 Антон [администратор]
Андрей, спасибо за уточнения.
Это стоит проверить для разных версий Delphi.
24.04.2016 20:30 Алиса [гость]
Спасибо большое за статью! Очень помогло при написании курсовой.
Имя:
Текст комментария:
* В комментариях запрещено публиковать рекламные объявления. Сообщения, содержащие ссылки на сторонние ресурсы добавляется в скрытом режиме. Они будут открыты, если не нарушают установленных правил, после проверки.
Защита от спам-роботов (* Обязателельно укажите ответ на простой вопрос ниже.)
Сколько ножек у трeхногого табурета? (цифра)