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

Чтение файла

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

Read (<файл. переменн.>,<переменная1>[,<переменная2>,…]);

Соответствующие компоненты файла считываются в переменные 1, 2 и т.д.

После чтения курсор остается на этой же строке файла.

Можно прочитать и целую строку файла:

Так как информация в текстовом файле вся символьная, то считывать ее можно в строковую переменную:

ReadLn (<файл. переменн.>,<строка>);

Добавление в файл:

Append (<файл. переменн.>);

Инициирует запись в ранее созданный текстовый файл, указатель устанавливается в конец файла. Если файл до этого был открыт, то Append закроет его и откроет снова для дозаписи

program file_wri_strok;

{просмотр указанного текстового файла

с подсчетом количества слов в каждой строке файла }

Function kol_slov(s:String):byte;

var i,k:byte;

Begin

writeln('в строке"',s,'"'); //otladka

i:=1;

While i<=Length(s) do //удаление лишних пробелов

If (( s[i]=' ') and (s[i+1]=' '))

Then Delete(s,i,1)

Else inc(i);

k:=0;

If (s[Length(s)]<>' ') and (Length(s)<>0) Then s:=s+' ';

for i:=1 to Length(s) do {подсчет количества слов}

If((s[i]=' ') or (s[i]=',')or(s[i]='.')or(s[i]=';')) Then inc(k);

//If s[i]= in [‘.’, ’,’, ’;’] Then Inc(k);

//содержание во множестве

RESULT:=k;

End;

Var f:text; nam,st:string; ch:char; n:byte;

begin

repeat

writeln('введите имя файла');

readln(nam); { Имя внешнего файла }

assign (f,nam); { Устанавливаем связь между внешним файлом с именем nam и файловой переменной f1 }

n:=0; {количество выведенных строк}

while not eof(f) do { пока не конец файла: }

begin

readln(f,st); { читаем из файла }

writeln( 'слов:',kol_slov(st)); {выводим количество слов в ней}

n:=n+1; { подсчитываем их количество}

if n=20 then {если экран заполнен строками, то: }

begin

writeln('нажмите ввод для продолжения просмотра');

readln;

n:=0 {считаем сначала}

end;

end;

close(f); { Закрываем файл }

end;

writeln(' еще просмотрим? Введите "N" - для окончания программы');

readln(ch);

until Upcase (ch)='N' ;

END.

{Пример. Запишем в текстовый файл переменные любого типа}

Type

St = String[15];

Zap = Record

A : St;

C : Byte;

B : St;

End;

Var

k1,k2,i : Integer;

a1,a2 : Real;

ch1,ch2 : String[4];

st1,st2 : St;

v_z : Zap;

f : Text;

BEGIN

Assign(f,'ft1.txt');

Rewrite(f);

k1:=25; a1:=-3.34; //присвоим значение переменным

ch1:='&## ';

st1:='stroka1';

Writeln(f,k1, ' ' , ch1:4, a1);

{различные по типу переменные записаны в одной строке файла:

25 &## -3.3400000000E+00}

With v_z do

Begin

a:='Иванов';

b:='Иван';

c:=2;

Write(f,a); // записали в файл строку

Writeln(f,c,b);

//в этой же строке записали еще число и строку

End;

Сlose(f);

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

Writeln('создали файл:');

Read(f,k2); //прочитали из файла число

Writeln('k2=',k2); //вывели его

Readln(f,ch2,a2); //прочитали строку и число

Writeln('ch2=',ch2:4,a2); //вывели их

Read(f,v_z.a); //прочитали запись

{$I-}

Read(f,v_z.c);

{$I+}

If IORESULT<>0 then

Writeln('при ошибке ioresult=: ',ioresult);

Readln(f,v_z.b);

Writeln('v_z.a= ',v_z.a,' b= ',v_z.b,' c= ',v_z.c);

Close(f);

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

Writeln(f,1,2,3,4,5,6,7,8,9); //записали туда цифры

Close(f);

Reset(f);

Writeln('расширенный файл:');

While not eof(f) do //пока не конец файла

Begin

Readln(f,st1); //читываем строку файла

Writeln(st1); // выдаем ее на экран

End;

Close(f);

Readln;

END.

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

Процедура уничтожения существующего файла:

(файл д.б. заранее закрыт!)

Erase(<файлов.переменная>);

Т. о., для работы с файлом всегда необходимо:

  1. связать файл и файловую переменную;

  2. открыть файл для записи или чтения;

  3. обработать файл (записать, прочитать, добавить, удалить);

  4. закрыть файл.

Если несуществующий файл открыть для чтения, то будет ошибка. Чтобы ее избежать, используется директива (указание) компилятора «отключить контроль ошибок ввода/вывода»: {$I-}

Стандартная функция IORezult выдает значение 0, если файл существует и не 0, если файла нет.

{Функция проверки существования файла}

Function IO_Fil(VAR f1:TFile):Boolean;

Begin

{$I-} {Отключаем проверку ошибок ввода-вывода}

Reset (f1); {Открываем файл для чтения}

{$I+} {Включаем проверку ошибок ввода-вывода}

If IOResult = 0 {Если файл есть, то:}

Then IO_Fil:= True; //Result:True {файл есть}

Else IO_Fil:= False; {файла нет}

End;

Д. З.:

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

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

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