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

Мы подробно рассмотрим, как копировать, удалять, переименовывать файлы. Научимся считывать и записывать информацию в типизированные файлы.

Копирование файлов с помощью .

Для этого нам потребуется вызов всего одной функции, которая выполняет именно копирование файлов. Это функция CopyFile(). У нее три параметра, два из которых обязательны. Вот полный синтаксис.
CopyFile("путь до начального файла","Путь куда надо копировать",Перезаписывать или нет)

Пример: CopyFile("D:sekretBD.txt","C: ame.txt", true);

В первом параметре можно указывать не только полный путь до файла. Если укажем, например, такой путь "sekretBD.txt", то наша программа будет искать этот файл в своем каталоге. Имя и разрешение нужно указывать именно такими, какие они есть у файла, иначе программа просто не найдет файл.
Во втором параметре тоже можно указывать относительный путь и там вы можете указать имя и расширение файла такое, какое захотите. Т.е. с помощью этой функции можно делать и переименовывание тоже.
Третий параметр отвечает за перезапись файла. Если мы укажем true, то файл не будет перезаписан, а если false, то программа перезапишет файл.

Переименование файлов с помощью

За переименование файлов отвечает функция RenameFile(). У нее 2 параметра. Вот ее полный синтаксис
RenameFile("путь до файла","новое имя");
Честно говоря, синтаксис этой функции меня не особо радует. В нем тоже в обоих параметрах надо указывать полный путь. Т.е. если мы, например, напишем так

RenameFile("C:2.txt","3.txt");

То он скопирует файл в каталог программы. Т.е. получается, что она может выполнять роль копирования тоже. Это немного странно.

Удаление файлов с помощью

Ну здесь все совсем просто. Функция, с помощью которой можно удалить файл, вызывается так:

DeleteFile("C:myprofile.txt");

Единственное, что она не всегда 100% удаляет файл. Когда файл защищен, она его не сможет удалить.

Работа с типизированными файлами в

Что такое типизированный файл? Это файл с определенной структурой. Обычно это структурой выступают записи и базовые типы. В общем, важно, чтобы у типа был известен фиксированный размер, поэтому тип string применять нельзя, нужно делать так: String[N].
Вначале нам нужно объявить переменную, где будут храниться данные из файла. Делается это так:

Var f: file of <Тип>
Например, f: file of string;

Затем нам нужно соединиться с файлом. Для этого есть команда AssignFile. Для вызова надо прописать два параметра, это переменная, которую мы объявили выше и путь до файла. Например

AssignFile(f,"C:delphi.ini");

Теперь файл нужно открыть. Можно открыть двумя способами: с перезатиранием и без. Метод Rewrite открывает файл, предварительно создав его. Т.е. если файла в указанном нами пути не будет находиться, то он его создаст. Если там уже был такой файл, то он будет удален и заново создастся чистый файл. Метод Reset открывает файл и ставит указатель в самое начало файла. Но этот метод опасен тем, что если файла, указанного в подключении, нет, то программа вылетит с ошибкой. Так что для правильного применения функции Reset надо сказать компилятору об отключении ошибок. Задается это директивой {$I-} т.е. полный синтаксис функции reset будет таким:

{$I-}
Reset(f);
{$I+}

После этого надо проверить, был ли открыт файл или нет. Это можно сделать с помощью функции IOResult. Если она не равна нолю, то все успешно.
Полный синтаксис:

{$I-}
Reset(f);
{$I+}
If IOresult <> 0 then <ваш код>

Также осуществить проверку поможет функция FileExists. В ней нужно указать путь до файла.
Для чтения файла служит функция Read(), в которой указываются два параметра: переменная файла и тип записи, в нашем случае это string. Синтаксис:

Для записи в файл служит функция Write(), в которой указываются такие же два параметра: переменная файла и тип записи, в нашем случае это string. Синтаксис:

While not eof(f) do
Read(f,String);

Также есть функция seek, с помощью которой мы можем перейти на интересующую нас запись. Например, нам нужно обратиться к 20 записи и мы делаем так:

Еще есть функция truncate, С помощью которой мы можем удалить все записи файла, начиная от позиции указателя. Позицию можно указать с помощью функции seek, кто не понял.

После выполнения всех операций с файлом, необходимо его закрыть с помощью функции CloseFile(f);
Вот и все. На этом урок закончен. До встречи на сайте!

Создайте новый проект Delphi. Первым делом разработаем интерфейс программы. Изменим некоторые свойства главной формы. Прежде всего, присвойте соответствующее значение свойству Caption (заголовок формы) - например, Работа с файлами. Поскольку окно нашей программы должно всегда находиться поверх всех остальных окон, следует присвоить свойству FormStyle значение fsStayOnTop. Больше никаких свойств формы изменять не будем.

Разместите в левом верхнем углу формы, один над другим два компонента Label (метка) категории Standard . Для верхней метки присвойте свойству Caption значение Что:, а для второй - Куда:. Рядом с метками разместите по одному компоненту Edit (поле ввода) категории Standard . Присвойте свойству Name (имя) верхнего поля значение from, а свойству Name нижнего - значение where. Свойствам from.Text и where.Text присвойте пути по умолчанию, например: c:\1.txt и d:\2.txt.

Для того чтобы не утруждать пользователя копированием или ручным вводом путей размещения файлов, воспользуемся стандартными диалоговыми окнами открытия и сохранения файлов. Диалоговом окну открытия файла соответствует компонент OpenDialog категории Dialogs , а диалоговому окну сохранения - компонент SaveDialog той же категории. Разместим эти компоненты на форме. Для удобства изменим значение свойства OpenDialog1.Name на Open1, а значение свойства SaveDialog1.Name на Save1.

Справа от полей from и where разместим кнопки вызова диалогового окна обзора (компоненты Button категории Standard ). Свойству Caption этих кнопок присвойте значение Обзор или просто поставьте точки. При желании, можете изменить размеры кнопок.

Разместите на форме под полем where компонент Label категории Standard и присвойте его свойству Caption значение Размер файла:. Справа от этой метки разместите еще один компонент Label, очистив для нее свойство Caption - эта метка будет отображать размер обрабатываемого файла.

Ниже разместим две кнопки (компоненты Button), присвоим их свойствам Caption значения Копировать и Вырезать. Под этими кнопками разместим компоненты, которые будут использоваться для выбора и удаления файлов: компонент Edit для ввода пути к файлу, кнопка вызова диалогового окна обзора и кнопка для удаления файла.

Свойству Edit1.Name присвоим значение Del, а свойству Text – путь по умолчанию. Кнопку Обзор разместим справа, а кнопку Удалить файл - под полем Del.

Полученная форма должна соответствовать рис. 2.1.

Рис. 2.1. Форма Работа с файлами

Разработка программного кода

Разработаем процедуру копирования файла. Это можно было бы реализовать средствами WinAPI, однако в этом случае процедура, хотя и была бы менее громоздкой, оказалась бы "привязанной" к системе, что для программ нежелательно, поэтому лучше воспользоваться библиотеками Delphi.

Для начала объявим нашу процедуру (назовем ее doit) как закрытый член класса формы:

Реализацию процедуры создадим в разделе implementation:

procedure TForm1.doit();
f1, f2: file of Byte; //Работа с первым и вторым файлом
сор: Byte; //Для побайтового копирования
sizez: LongInt; //Хранит размер файла
{$I-} //Отключаем директиву, которая отслеживает ошибки
try //Начало блока обработки исключений
//Связываем файловую переменную f1 с первым файлом
AssignFile(f1, from.Text) ;
//Связываем файловую переменную f2 со вторым файлом
AssignFile(f2, where.Text);
Reset(f1) ; //Открываем первый файл на чтение
sizez:= Trunc(FileSize(f1) ); //Определяем размер файла
//Отображаем размер файла для пользователя
Label4.Caption:= IntToStr(sizez div 1024) + "Кб";
begin //Пока не достигнут конец первого файла
//Считываем один байт из первого файла
BlockRead(fl, cop, 1) ;
//Записываем один байт во второй файл
BlockWrite(f2, cop, 1);
CloseFile(f1) ; //Закрываем первый файл
CloseFile(f2) ; //Закрываем второй файл
end; //Конец блока обработки исключений
if IOResult<> 0 //Если возникла ошибка ввода-вывода
then MessageDlg("Ошибка при копировании файла!", mtError, ,0) //сообщение об ошибке
{Если ошибок не было, то выводим окно об успешном окончании копирования}
ShowMessage("Успешно скопировано! ");

⇘ Различные конструкции языка Object Pascal (комментарии, операторы ветвления, обработка исключений и др.) рассматриваются в приложении Г.

Эта процедура будет использоваться при копировании и переносе файлов. Сначала мы открываем файлы, которые выбрал пользователь, а затем проверяем, не было ли ошибок при их открытии. Если ошибок не было, то отображаем пользователю размер исходного файла и начинаем считывать байты из первого файла, записывая их во второй. Если копирование завершено и ошибок при этом не произошло, то отображаем сообщение об успешном окончании копирования.

Процедура doit вызывается при нажатии кнопки Копировать :

procedure TForm1.Button1Click{Sender: TObject);

По нажатию кнопки Вырезать должно происходить обычное копирование с последующим удалением скопированного файла:

doit; //копируем
DeleteFile(from.Text) ; //удаляем исходный файл

Теперь создадим процедуры выбора и сохранения файла с помощью стандартных диалоговых окон. Для выбора первого (исходного) файла следует создать следующий обработчик события OnClick (кнопке Button2 соответствует поле from):

then from.Text:= Open1.FileName

При нажатии кнопки Обзор открывается диалоговое окно выбора файла (Open1.Execute). Если в этом окне пользователь нажал кнопку Отмена (Open1.Execute = False), то сообщаем ему об этом и не выполняем никаких действий. Если пользователь выбрал файл, то копируем путь к нему в соответствующее поле ввода.

Создадим аналогичный обработчик события для выбора пути назначения при копировании первого файла (кнопке Button3 соответствует поле where):

then where.Text:= Save1.FileName
else ShowMessage("Вы не выбрали место длясохранения файла!");

Здесь выполняется та же проверка, что и в предыдущем случае. Затем выбранный путь заносится в соответствующее поле ввода, чтобы его, при желании, можно было откорректировать.

Теперь создадим аналогичный обработчик события OnClick для кнопки Обзор , используемой для выбора размещения удаляемого файла:

then Del.Text:= Open1.FileName
else ShowMessage("Файл не был открыт!");

Сама кнопка Удалить выполняет при нажатии следующий код:

procedure TForm1.Button6Click(Sender: tobject);
DeleteFile(Del.Text); //удаляем файл
if not FileExists(Del.Text) //проверяем существование файла
then ShowMessage("Файл удален!"); //выводим сообщение

Сначала мы удаляем файл, а затем проверяем, существует ли он на диске после выполнения операции удаления. Если его не существует, то выводим сообщение об успешном удалении файла. Теперь можно откомпилировать и запустить программу на выполнение. Внешний вид окна Работа с файлами в действии показан на рис. 2.2.

Рис. 2.2. Программа Работа с файлами в действии

Полный исходный код модуля

Полный код модуля программы Работа с файлами представлен в листинге 2.1.

Листинг 2.1. Модуль программы Работа с файлами
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ShellAPI, Gauges;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure doit; //объявление процедуры doit


f1, f2: file of byte; //работа с первым и вторым файлом
сор: byte; //для побайтового копирования
sizez: longint; //хранит размер файла
{I-} {отключаем директиву, которая следит за ошибками ввода/вывода}
//связываем Файловую переменную f1 с первым файлом
//связываем файловую переменную f2 со вторым файлом
Reset(f1); //открываем первый файл на чтение
sizez:= Trunc(FileSize(f1)); //узнаем размер файла
//Отображаем размер файл для пользователя}
Label4.Caption:= IntToStr(sizez div 1024) + "Кб’;
{Создаем второй файл или перезаписываем его, если он уже существует}
while not Eof(f1) do begin //пока не достигнут конец первого файла
//считываем один байт с первого файла
//записываем один байт во второй файл
CloseFile(f1);//закрываем первый файл
CloseFile(f2);// закрываем второй файл
if IOResult <> 0 //Если возникла ошибка ввода-вывода
then MessageDlg("Ошибка при копировании файла!", mtError, , 0) //сообщение об ошибке
{если ошибок не было, то выводим окно об успешном окончании копирования}
ShowMessage("Успешно скопировано!");

procedure TForm1.ButtonlClick(Sender: TObject);

procedure TForm1.Button2Click(Sender: TObject);
if Open1.Execute then from.Text:= Open1.FileName
else ShowMessage("Файл не был открыт");

procedure TForm1.Button3Click(Sender: TObject);
if Save1.Execute then where.Text:= Save1.FileName
else ShowMessage(""Вы не выбрали место для сохранения файла!");

procedure TForm1.Button5Click(Sender: TObject);
DeleteFile(from.Text); //удаляем исходный файл

procedure TForm1.Button4Click(Sender: TObject);
if Open1.Execute then del.Text:= Open1.FileName
else ShowMessage("Файл не был выбран");

procedure TForm1.Button6Click(Sender: TObject);
DeleteFile(del.Text); //удаляем файл
then //проверяем существование файла
//выводим сообщение об успешном удалении
ShowMessage("Файл удален!");

⊚ Все файлы проекта и исполняемый файл рассмотренной программы находятся на прилагаемом к книге компакт-диске в папке Chapter_02.

Урок 15. Работа с файлами

В этом уроке рассмотрим очень важную тему в программировании - работа с файлами.
Практически в любой программе нужно копировать, открывать, изменять, сохранять, иногда удалять файлы.

Как известно, файлы имеют различные форматы и к ним применяются различные программы для обработки. Например, файлы рисунков BMP, текстовые файлы TXT и т.п. Файлы имеют различные имена и определенное расширение, имеющее в среде MS-DOS максимально три символа. Если у файла расширение RAR, то пользователь и операционная система знает, что это архиватор, причем windosw для обработки этого файла применяет средства, указанные в специальном разделе реестра.

Копирование файлов

Для копирования файлов применяется функция CopyFile. Формат ее такой:

CopyFile(Исходный_файл,Записуемый_файл,Флаг_перезаписи);

где: Исходный_файл – полный путь и название файла, который копируется;

Записуемый_файл – полный путь и название файла, куда копируется исходный файл;

Флаг_перезаписи – будет или нет перезаписан файл, если таковой уже существует (true - не будет, false - будет перезаписан).

CopyFile является функцией, которая возвращает флаг успешной или нет операции копирования.

Например, следующая строка:

if not CopyFile("c:\command.com","c:\1.com",true) then ShowMessage("Ошибка копирования");

скопирует файл command.com в файл 1.com только в том случае, если последнего нет, в противном случае будет выдаваться сообщение об ошибке копирования.

Перемещение файлов

Для перемещения файлов применяется функция MoveFile. Она имеет следующий формат:

MoveFile(Исходный_файл,Записуемый_файл);

Ее параметры аналогичны вышерассмотренной команде за исключением отсутствия флага перезаписи.

if not MoveFile("c:\1.com","c:\2.com") then ShowMessage("Ошибка перемещения");

Переименование файлов

Функция RenameFile

if not RenameFile("c:\2.com","c:\3.com") then ShowMessage("Ошибка переименования");

У всех вышесказанных командах параметры исходного и конечного файла имеет тип PChar. Это строковый тип с завершающимся нулем. Возможно, вы раньше слышали о таком формате строковых данных. В такую переменную можно занести строку очень большой длины. Ее размер ограничивается наличием нулевого байта в конце. Теоретически такая переменная может иметь бесконечный размер. На практике она ограничивается размерами выделяемой памяти для программы (2Гб).

Преобразование обычной строковой переменной, типа String в PChar производится функцией:

PChar(Строковая_переменная).

При этом, для команд файловых операций возможны объединение строк. Например:

procedure TForm1.Button1Click(Sender: TObject);

Var InDir,OutDir:String; // объявление строковых переменных

begin

InDir:="c:\1\"; // каталог исходных файлов

OutDir:="c:\2\"; // каталог записуемых файлов

CopyFile(PChar(InDir+"1.txt"),PChar(OutDir+"1.txt"),false);

CopyFile(PChar(InDir+"2.txt"),PChar(OutDir+"2.txt"),false);

end;

Здесь налицо операция соединения двух строковых переменных.

В итоге этой процедуры будет копирование файлов c:\1\1.txt и c:\1\2.txt в каталог c:\2. Файлы копируются под теми же именами.

Удаление файлов

Функция DeleteFile

if not DeleteFile("c:\3.com") then ShowMessage("Ошибка удаления");

Работа с текстовыми файлами. Чтение из текстового файла

На прошлых уроках мы как, в компоненте Memo процесс загрузки и записи текстового файла делался следующим образом:

Memo1.Lines.SaveToFile(Имя_файла); // сохранение

Все это благодаря свойству Lines, в котором хранятся строки.

Следующий пример обработки текстового файла очень похож на аналогичную на языке Pascal.
Знающие люди могут ощутить разницу, поскольку есть некоторые отличия.

procedureTForm1.Button1Click(Sender: TObject);

Varf:TextFile; // объявление файловой переменной

st:String ; // строковая переменная

begin

AssignFile(f,"c:\1.txt"); // привязка названия файла к файловой переменной

{$I-} // отключение контроля ошибок ввода-вывода

Reset(f); // открытие файла для чтения

{$I+} // включение контроля ошибок ввода-вывода

ifIOResult<>0 then // если есть ошибка открытия, то

begin

ShowMessage("Ошибка открытия файла C:\1.TXT");

Exit; // выход из процедуры при ошибке открытия файла

end ;

While not EOF(f) do // пока не конец файла делать цикл:

begin

ShowMessage(st); // выводить строку пользователю

end ;

CloseFile(f); // закрыть файл

end;

Прокомментирую некоторые строки этого примера.

Команда AssignFile осуществляет привязку строки пути файла к файловой переменной. Все дальнейшие операции с файловой переменной автоматически осуществляются с указанным файлом. Для избежания путаниц, указывайте полный путь к файлу.

{$I-} и {$I+} являются директивами компилятору, что в этом месту соответственно следует отключить и включить контроль ошибок ввода-вывода. В данном случае при неудачной попытке открытия файла c:\1.txt (файл отсутствует или открыт для записи другой программой) наша программа не выдаст аварийной ошибки и продолжит выполнение данной процедуры. Это свойство полезно для обработки всех возможных случаев в работе программы.

IOResult – переменная, которая хранит в себе код ошибки последней операции ввода-вывода. Если она равна нулю, то последняя операция была успешно выполнена.

EOF(Файл) – функция, возвращающая признак конца файла. Т.е. она показывает, достигнут или нет конец открытого файла.

ReadLn(Файл,Переменная) – процедура считывания переменной из файла. В отличие от команды Read производит считывание строки с завершающимся символом перевода строки под кодами 13 и 10 (клавиша Enter).

CloseFile(Файл) – процедура закрытия ранее открытого файла.

Работа с текстовыми файлами. Запись в текстовый файл

Рассмотрим пример:

procedure TForm1.Button1Click(Sender: TObject);

Var f:TextFile; // указатель на текстовый файл

AssignFile(f,"c:\1.txt"); // привязка названия к переменной

Append(f); // открыть файл для добавления

if IOResult<>0 then // если ошибка открытия (напр. файла нет)

Rewrite(f); // создать новый файл

if IOResult<>0 then // ошибка создания файла

ShowMessage("Ошибка создания файла C:\1.TXT");

WriteLn(f,"Привет"); // запись в файл строки с символами перевода строки

CloseFile(f); // закрыть файл

Процедура Append(Файл) открывает файл для записи и устанавливает указатель записи в конец файла, т.е. все добавляемые к файлу строки будут записаны в конец файла.

В нашем случае в самом начале файла 1.txt может не оказаться на диске, поэтому команда открытия файла для добавления вызовет ошибку. В этом случае срабатывает наш собственный контроль ошибок и выполняется команда создания файла.

Запись и чтение из файла не текстовых данных

Рассмотрим пример, в котором программа при выходе сохраняет свои размеры и положение окна на экране в файл и при последующем запуске восстанавливает состояние, которое было при выходе. Программа состоит из двух процедур OnShow и OnClose для окна Form1 программы.

procedure TForm1.FormShow(Sender: TObject);

Var f:file of Integer; // файловая переменная, тип integer

I:Integer; // целочистенная переменная

begin

AssignFile(f,"pos.ini");

{$I-}

Reset(f);

{$I+}

if IOResult<>0 then Exit;

Form1.Top:=i; // верхнее положение окна

Read(f,i);

Form1.Left:=i; // левое положение окна

Read(f,i);

Form1.Width:=i; // ширина окна

Read(f,i);

Form1.Height:=i; // высота окна

CloseFile(f);

end ;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);

Var f:file of Integer;

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


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