Открытие файла для ввода (чтения) выполняется вызовом процедуры Reset. Перед вызовом процедуры Reset с помощью функции AssignFile файловая переменная должна быть связана с конкретным файлом.
Если имя файла указано неверно, например файла с указанным именем на диске нет, то возникает ошибка времени выполнения программы. Следует отметить, что другой причиной возникновения ошибки при открытии файла, находящегося на гибком диске, может быть отсутствие готовности дисковода, проще говоря, отсутствие диска в накопителе. Поэтому в программе следует предусмотреть возможность повторной попытки открытия файла после подтверждения повторения операции. Как и при открытии файла для записи, программа может взять на себя задачу обработки возможной ошибки при открытии файла, проверяя значение функции IOResult, которая возвращает условный признак последней операции ввода-вывода. Если попытка открыть файл вызывает ошибку, то программа выводит диалоговое окно с сообщением об ошибке и запросом на подтверждение повторного открытия файла.
Возможны следующие режимы открытия файла для записи в него данных:
• перезапись (запись нового файла поверх существующего или создание нового файла);
• добавление в существующий файл.
Для того чтобы открыть файл в режиме создания нового файла или замены существующего, необходимо вызвать процедуру Rewrite(f), где f – файловая переменная типа TextFile.
Для того чтобы открыть файл в режиме добавления к уже существующим данным, находящимся в этом файле, нужно вызвать процедуру Append (f), где f – файловая переменная типа TextFile.
Чтение из текстового файла выполняется при помощи инструкций Read и Readln, которые в общем виде записываются следующим образом:
Read ( ФайловаяПеременная, СписокПеременных);
Readln ( ФайловаяПеременная, СписокПеременных) ;
где ФайловаяПеременная – переменная типа TextFile; СписокПеременных – имена переменных, разделенные запятыми.
Непосредственно ввод информации в текстовый файл осуществляется при помощи инструкции Write или Writeln. При этом файл, определенный файловой переменной F, должен быть открыт для записи.
В общем виде эти инструкции записываются следующим образом:
Write (ФайловаяПеременная, СписокВывода) ;
Writeln (ФайловаяПеременная, СписокВывода);
где ФайловаяПеременная – переменная, идентифицирующая файл, в который выполняется вывод; СписокВывода – разделенные запятыми имена переменных, значения которых надо вывести в файл. Помимо имен переменных в список вывода можно включать строковые константы.
Например, если переменная f является переменной типа TextFile, то инструкция вывода значений переменных x1 и х2 в файл может быть такой:
Write(f, 'Корни уравнения', xl, х2);
Различие между инструкциями Write и Writeln состоит в том, что инструкция Writeln после вывода всех значений, указанных в списке вывода, записывает в файл символ "новая строка".
Пример_1:Запись и добавление в текстовый файл.
Рис. 1. Диалоговое окно программы записи и-добавления в файл
Кнопка Записать открывает файл в режиме создания нового или замещения существующего файла и записывает текст, находящийся в поле компонента Memo1. Имя файла задается в поле Edit1.
procedure TForm1.Button1Click(Sender: TObject); var f: TextFile; // файл fName: String[80]; // имя файла i: integer; begin fName := Edit1.Text; AssignFile(f, fName); Rewrite(f); // открыть для перезаписи // запись в файл for i: =0 to Memo1.Lines.Count do writeln(f, Memo1.Lines[i]); CloseFile(f); // закрыть файл MessageDlg('Данные ЗАПИСАНЫ в файл ',mtlnformation,[mbOk],0); end;
Кнопка Добавить. открывает файл, имя которого указано в поле Edit1, и добавляет в него содержимое поля Memo1.
procedure TForm1.Button2Click(Sender: TObject);var f: TextFile; // файл fName: String[80];.// имя файла i: integer; begin fName := Edit1.Text; AssignFile(f, fName); Append(f); // открыть для добавления // запись в файл for i:=0 to Memo1.Lines.Count do writeln(f, Memo1.Lines[i]); CloseFile(f); // закрыть файл MessageDlg('Данные ДОБАВЛЕНЫ в файл ',mtInformation,[mbOk],0); end;
Пример_2:Написать программу, которая открывает файл, записывает данные в этот файл и затем закрывает
procedure TForm1.Button1Click(Sender: TObject);
var t: textFile; s:string;
begin
if OpenDialog1.Execute=true then
begin
Assignfile (t,OpenDialog1.FileName);
{$I-} reset(t); {$I+}
if IOResult<> 0 then ShowMessage('Введите правильное имя')
else
begin
while not eof(t) do
begin
readln(t,s);
memo1.Lines.Add(s);
end;
CloseFile(t);
end;
end;
end;
Чтобы иметь возможность воспользоваться диалоговым окном Открытие файла, на форму необходимо поместить компонент OpenDialog, расположенный на вкладке Dialogs. Чтобы иметь возможность воспользоваться диалоговым окном Сохранение файла, на форму необходимо поместить компонент SaveDialog, также расположенный на вкладке Dialogs.
LoadFromFile – загружает содержимое из файла в компонент Memo
Memo1.Lines.LoadFromFile(OpenDialog1.FileName);
SaveToFile – сохраняет содержимое компонента Memo в файл