Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
АЯП лекции.doc
Скачиваний:
12
Добавлен:
03.12.2018
Размер:
634.37 Кб
Скачать

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

Текстовый файл – файл последовательного доступа, информация в котором представлена в виде текста (символов или строк). Для того, чтобы записать или считать n-ый элемент, необходимо производить операцию записи или чтения (n-1) предыдущих элементов.

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

  1. Только для текстовых файлов используется открытие файла APPEND (имя файловой переменной) – процедура для дозаписи файла, он отрывается для записи, маркер файла устанавливается за последним элементом в текстовом файле.

  2. Т.к. информация в текстовом файле представлена в виде строк (маркеры конца строки #10#13), то только для текстовых файлов можно использовать процедуры readln и writeln и использовать функцию EOLN (<имя файловой переменой>); становится автоматически истиной, если считывается маркер конца строки.

  3. Т.к. при чтении (записи) могут возникать различные сочетания типа буфера чтения (переменной), в которую считывается информация из файла из операторов чтения read и readln, соответственно возникают 4 случая:

а) если из файла считывается информация посимвольно с использованием read, то корректно считается только первая строка; если будет организован цикл до конца файла, то он будет зацикливаться, т.к. оператор read не переводит указатель файла при чтении (записи) на новую строку, поэтому для корректного считывания информации необходимо обеспечить при чтении маркера конца строки перевод маркера файла на новую строку – используем условный оператор.

var t:text;

c:char;st:string;

.......................

repeat read(t,c);

if eoln(t) then readln(t);

until eof(t);

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

в) если из файла считываются строки при помощи read, то возникает проблема, как в пункте 1. Ее решение аналогично, только вместо условного оператора используется readln.

var t:text;

c:char;st:string;

........................

repeat read(t,st);

readln(t);

until eof(t);

г) если для построкового считывания используется readln, то дополнительных приемов применять не нужно.

Пример. Текстовый файл можно сформировать непрограммно. Для этого используется блокнот. Рассмотрим формирование текстового файла по строкам, используя принцип «yes/no».

var t:text;st:string;

c:char;

begin writeln(‘Введите имя файла’);

readln(st);

assign(t,st);rewrite(t);

repeat

writeln(‘Введите строку’);

readln(st);

writeln(t,st);

writeln(‘Будете вводить строку?’ y/n);

readln(c);

until (c=’y’) or (c=’n’);

close(t);end.

Пример. Задан текстовый файл. Вывести на экран слова из этого файла в столбик (без формирования слова).

var t:text;c:char;

zp:set of char;

begin assign(t,’text.txt’);

reset(t);

zp:=[‘.’,’,’,’ ‘,#10#13];

repeat read(t,c);

if (c in zp) or (eof(t)) then writeln

else write(c);

if eoln(t) then readln(t);

until eof(t);end.

Пример. С выделением слова из файла.

var t:text;c:char;st:string;

zp:set of char;

begin assign(t,’text.txt’);

reset(t);

zp:=[‘.’,’,’,’ ‘,#10#13];

repeat st:=’’;read(t,c);

while (not(c in zp) and (not eof(t)) do

begin st:=st+c;read(t,c);end;

if eoln(t) then readln(t);

if st<>’’ then writeln (st);

until eof(t);end.

Алгоритм внесения изменений в файл любого типа.

Только для текстового файла, используя открытие файла APPEND, можно дописать информацию. Если необходимо изменить информацию (удалить, добавить, изменить), необходимо использовать вспомогательный файл. Сам же алгоритм выглядит следующим образом:

  1. считываем информацию из исходного файла;

  2. обработка информации;

  3. измененную информацию записываем во вспомогательный файл;

  4. закрываем оба файла (исходный и полученный);

  5. удаляем исходный файл (ERASE(t));

  6. вспомогательный файл переименовываем в имя исходного файла (RENAME (v,st)).

Примечание:

  1. Для реализации алгоритма имя исходного файла необходимо хранить в некоторой строковой переменной до конца отработки этого алгоритма.

  2. Алгоритм у пользователя создает иллюзию, что система работает с одним только файлом.

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

var v,t:text;

name,st:string;

ch:’a’..’z’;

begin writeln (‘Введите имя файла’);

readln(name);

assign(v,’text.txt’);

assign(t,name); rewrite(v);

for ch:=’a’ to ‘z’ do

begin reset(t);

repeat readln(t,st);

if st[1]=ch then writeln(v,st);

until eof(t);

close(t);

end;

close(f);

erase(t);rename(v,name);

end.

Алгоритм добавления, удаления, замещения информации в файле любого типа.

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

2) Если добавление информации, то записываем информацию в вспомогательный файл.

Если удаление, то считываем эту информацию из исходного файла, а в вспомогательный не записываем.

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

3) Переписываем оставшуюся информацию из исходного файла в вспомогательный. Закрываем оба файла. Исходный удаляем. Вспомогательный переименовываем именем исходного.

Пример. Задан текст. Заменить слова в нем «ЭВМ» на «машина».

var v,t:text;

name,st:string;

mn:set of char; c:char;

begin writeln(‘Введите имя файла’);

readln(name);

assign(v,’text.txt’);

assign(t,name);rewrite(v);

mn:=[‘.’,’,’,’ ‘];

repeat st:=’’;

read(t,c);

while (not (c in mn)) and (not eof(t)) and (not eoln(t)) do begin st:=st+c;

read(t,c);end;

if st=’ЭВМ’ then write(v,’машина’);

else write(v,st);

if c in mn then write (v,c);

if eoln(t) then begin

readln(t);

writeln(v);

end;

until eof(t);

close(t);

close(v);

erase(t);

rename(v,name);

end.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]