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


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

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



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

Memo1.Lines.LoadFromFile(Имя_файла); // загрузка

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

ReadLn(f,st); // читать из файла строку

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; // указатель на текстовый файл

begin

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

{$I-}

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

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

Begin

{$I-}

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

{$I+}

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

Begin

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

Exit;

end;

end;

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

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

end;

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

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

 

procedure Append (var F: Text);

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

позволяет добавлять информацию

procedure AssignPrn(var F: Text);

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

function Eoln (var F: Text): Boolean;

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

с помощью процедуры Read, не переходящей к началу следующей строки автоматически.

 

procedure Erase(var F: Text);

Удаление файла. Он должен быть определен с помощью процедуры AssignFile, но не должен быть открыт

 

 

procedure Flush(var F: Text);

Информация, которая была записана в файл из программы, но находится во временном буфере, физически перемещается в файл на диске

 

 

function SeekEof (var F: Text): Boolean;

Возвращает значение True, если текущая позиция расположена в конце файла

 

function SeekEotn(var F: Text): Boolean;

Возвращает значение True, если текущая позиция расположена е конце строки

 

procedure SetTextBuf (var F: Text;var Buf; Size: Integer);

Устанавливает размер буфера для операций ввода/вывода с текстовыми файлами (параметр Size). Этот буфер располагается внутри программы. Он указывается в

качестве второго параметра. Это может быть, например, массив символов

 

Конец файла

В процессе обработки файла часто возникает потребность обнаруживать его конец.

Например, когда файл необходимо прочитать от начала до конца при поиске нужной

записи. Для подобного контроля в Паскале имеется функция Eof, единственный

параметр которой — файловая переменная. Эта функция возвращает значение True,

если после выполнения последней операции ввода/вывода текущая позиция ока-

зывается в самом конце файла и дальнейшее считывание данных невозможно. Как

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

тый с помощью процедуры Rewrite, выполняется последовательно и текущая пози-

ция всегда расположена в конце файла.

ВНИМАНИЕ При использовании функции Eof надо помнить, что если она вер-

нула значение True, то попытка выполнить считывание из файла

приведет к ошибке.

В следующем примере выполняется подсчёт числа строк в текстовом файле.

AssignFile(F, 'C:\A.TXT');

Reset (F);

i:= 0;

while not Eof (F) do

begin

ReadLn(F,S);

inc (i);

end;

CloseFile(F);

Значение переменной i будет увеличиваться при каждой операции ввода строки.

 



Поделиться:


Последнее изменение этой страницы: 2017-02-21; просмотров: 179; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.140.198.12 (0.012 с.)