Назначение файла
Объявление файловой переменной задает только тип компонентов файла. Для того, чтобы программа могла выводить данные в файл или считывать их из файла, необходимо указать конкретный файл, т.е. задать имя файла.
Имя файла задается с помощью процедуры AssignFile, связывающей файловую переменную с конкретным файлом.
Описание процедуры AssignFile выглядит так:
AssignFile( var f, Имя_файла: string);
Имя файла задается согласно принятым в Windows правилам. Оно может быть полным, т.е. состоять не только из имени файла, но и включать путь у файлу.
Для того, чтобы все стало понятно приведу примеры:
AssignFile(f,'c:\Windows\1.txt');
AssignFile(f,'\students\results.txt');
А если необходимый вам файл находится в той же директории, что и ваша программа, то объявление процедуры может выглядеть так:
AssignFile(f,'config.cfg');
Вывод в файл
Непосредственно вывод в текстовый файл осуществляется при помощи знакомых всем инструкций write или writeln. В общем виде эти инструкции можно записать так:
write(Файловая_перменная, Список_Вывода);
где, Файловая_переменная - переменная, идентифицирующая файл, в который выполняется вывод.
Список_Вывода - разделенные запятыми имена переменных, значения которых надо записать в файл. Помимо имен переменных в список вывода можно включать и строковые константы.
Например, если переменная f является переменной типа TextFile, то инструкция вывода значений переменных x1 и x2 может быть такой:
write(f, ' Корни введенного уравнения: ',x1,x2);
Различие между инструкциями write и writeln состоит в том, что инструкция writeln после вывода всех значений, указанных в списке вывода, записывает в файл символ "новая строка".
Открытие файла для вывода
Перед выводом в файл его необходимо открыть. Если программа, формирующая выходной файл, уже использовалась, то возможно, что файл с результатами уже есть на диске. Поэтому программист должен решить, как поступить со старым файлом: заменить старые данные на новые или новые данные добавить к старым. Способ использования старого файла определяется во время открытия файла.
Возможны следующие режимы открытия файла для записи в него данных:
Перезапись (запись нового файла поверх существующего или создание нового файла, если его не существует)
Добавление в существующий файл (как правило в конец файла, но можно записать данные и в произвольное место)
Для того, чтобы открыть файл в режиме создания нового файла или замены существующего, необходимо вызвать процедуру Rewrite(f), где f - файловая переменная типа TextFile.
Для того, чтобы открыть файл в режиме добавления, необходимо вызвать процедуру Append(f), где f - файловая переменная типа TextFile.
Для того, чтобы понять принцип работы с файлами создадим пробную программу. На форме будут две командных кнопки. Одна с надписью "Создать", другая - "Добавить". При нажатии на кнопку "Создать" (Button1) будет создаваться текстовый файл и в него будет записано 3 строки. При нажатии "Добавить" в конец файла будет добавлено еще 3 строки текста.
Процесс создания программы рассмотрим по частям. Для начала напишем обработчик события кнопки "Создать" (Button1). Этот код будет выглядеть примерно так:
Листинг 4. Создание нового или замена существующего файла procedure TForm1.Button1Click(Sender: TObject); var f:TextFile; i:integer; begin AssignFile(f,'D:\test.txt');{Объявляем файл} Rewrite(f); {Открываем файл} for i:=1 to 3 do writeln(f,'Строка ',i);{записываем в файл} CloseFile(f);{закрываем файл} end; |
В результате выполнения приведенной выше процедуры на диске D: появится файл test.txt. Его содержание будет таким:
Строка 1
Строка 2
Строка 3
На листинге 5 приведена процедура, которая запускается щелчком командной кнопки "Добавить".
Листинг 5. Добавление в существующий файл procedure TForm1.Button2Click(Sender: TObject); var f:TextFile; i:integer; begin AssignFile(f,'D:\test.txt');{объявляем файл} Append(f);{открываем для добавления} for i:= 4 to 6 do writeln(f,'Строка ',i);{записываем} CloseFile(f);{закрываем файл} end; |
В результате нажатия на первую кнопку, а затем на вторую содержимое файла test.txt изменится и его содержимое станет таким:
Строка 1
Строка 2
Строка 3
Строка 4
Строка 5
Строка 6
Если после щелчка на кнопке "Добавить", нажать еще раз кнопку "Создать", то файла будет содержать только три строки.
Исходные коды это программки для Дельфи 5 вы можете скачать здесь.
На всякий случай приведу полный код приложения:
Листинг 6. Полный код программы работы с файлами unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.Button1Click(Sender: TObject); var f:TextFile; i:integer; begin AssignFile(f,'D:\test.txt');{Объявляем файл} Rewrite(f); {Открываем файл} for i:=1 to 3 do writeln(f,'Строка ',i);{записываем в файл} CloseFile(f);{закрываем файл} end; procedure TForm1.Button2Click(Sender: TObject); var f:TextFile; i:integer; begin AssignFile(f,'D:\test.txt');{объявляем файл} Append(f);{открываем для добавления} for i:= 4 to 6 do writeln(f,'Строка ',i);{записываем} CloseFile(f);{закрываем файл} end; end. |