Учебник по Delphi

Текстовые файлы.

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

   Если рассматривать структуру текстового файла, то он содержит символы, организованные в строки. Символы же могут быть любыми (даже невидимыми при выводе на экран).

   Текстовые файлы открываются и закрываются так же, как и любые другие. Но процедуру Reset в текстовых файлах можно использовать лишь для их чтения. Для записи текстового файла его нужно открыть с помощью Rewrite (в этом случае создается новый файл) или использовать процедуру Append:

procedure Append(var F: Text);

   Она открывает текстовый файл (именно текстовый, с другими типами файлов процедура Append не работает) для дополнения, то есть новые строки текста будут добавляться в конец файла после существующих строк. Если открывать текстовый файл с помощью Rewrite, то он будет доступен для записи, но строки будут добавляться в начало файла.

Рассмотрим примеры работы с текстовыми файлами:

Формирование текстового файла

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

Введите эту процедуру вместо пустой.

Листинг 8.1
procedure TForm1.Button1CI ick(Sender: TObject);
var
F: TextFile;
begin
AssignFi le(F,myf i le.txt);
Rewrite(F);
WriteLn(F,Привет! Это первая строка в текстовом файле);
CloseFi le(F);
end;

   После запуска программы при нажатии кнопки будет создан файл myfile.txt в той же директории, где расположена запускаемая программа. В файл запишется строка текста, а затем он будет закрыт.

Добавление строк в файл

   Теперь можно попробовать добавить в файл строки. Сделаем для этого еще одну кнопку на форме (Button2) и запишем в процедуру Button2Click такой код.

Листинг 8.2
procedure TForm1.Button2CI ick(Sender: TObject);
var
F: TextFile;
begin
AssignFile(F,myfi le.txt);
Append(F);
WriteLn(F,Хлебом не корми, дай только строки добавлять!);
CloseFi le(F);
end;

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

Чтение файла

   И еще один пример работы с текстовыми файлами. На этот раз — чтение файла, в котором что-то написано. Поместите на форму еще одну кнопку (третью) и рядом с ней компонент Memol. В процедуру Buttons. Click введите код.

Листинг 8.3
procedure TForm1.Button3CI ick(Sender: TObject);
var
F: TextFile;
s: String;
begin
AssignFile(F,myfile.txt);
Reset(F);
ReadLn(F.s);
// читаем строку из файла в Memol
Memol. Lines.Add(s); // добавляем строки в Memol
CloseFi le(F);
end;

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

Листинг 8.4
procedure TForml.ButtonSCI ick(Sender: TObject);
var
F: TextFile;
s; String;
begin
AssignFile(F,myfile.txt);
Reset(F);
whi le not Eof(F) do
begin
ReadLn(F.s);
// читаем строку из файла в Memo"!
Memol.Lines. Add(s); //добавляем строки в Memo!
end;
CloseFi le(F);
end;

   Здесь можно наблюдать цикл while, условием выполнения которого является not Eof ( F ) , что в переводе на русский язык означает «не конец файла» (функция Eof (F) возвращает True, если достигнут конец файла). Пока не будет достигнут конец файла, цикл будет повторяться, читая по одной строке и добавляя ее в Memol.

   Вообще можно за один раз прочитать текстовый файл в Memo. Для этого нужно написать всего лишь одну строку кода:

Memol .Lines . LoadFromFile,( 'myf ile. txt') ;

   Казалось бы, зачем читать файл по строке, если так проще? Когда необходимо прочитать текстовый файл целиком, тогда, конечно, этот простой способ подходит. Если же вам нужно выбирать по какому-либо критерию, одни строки читать, а другие пропускать, то как раз и пригодится метод чтения по одной строке. Модифицируем наш пример так, чтобы читались все строки, кроме начинающихся с символа «;».

Листинг 8.5
procedure TForml. Button3CIick(Sender: TObject);
var
F: TextFile;
s: String;
begin
AssignFile(F,myfile.txt);
Reset(F);
while not Eof(F) do
begin
ReadLn(F.s);
// читаем строку из файла в Memol
if so then
if s[1]=; then Continue;
Memol. Lines. Add(s);
// добавляем строки в Memol
end;
CloseFile(F);
end;

   После чтения строки из файла в переменную s проверяем: если первым символом строки s является точка с запятой (if s [ 1 ] = ' ; ' ), то даем команду перейти к следующей итерации цикла while (читаем следующую строку из файла). Проверка so' ' нужна, чтобы не возникла ошибка чтения файла, если вдруг встретится пустая строка.

   У пустой строки нет первого символа, который мы пытаемся проверить (s [ 1 ]). В текстовых файлах можно читать и записывать не только строки целиком, но - и отдельные символы. Если строки читаются/записываются с помощью ReadLn/ WriteLn, то отдельные символы — с помощью Read/Write.




 

Рейтинг@Mail.ru          Rambler's Top100

X-ZiBiT