|
Учебник по 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.
|
|
|