Чтение файла
При чтении из файла необходимо следить, чтобы переменные, в которые будет считываться информация, были соответствующего типа.
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(<файлов.переменная>);
Т. о., для работы с файлом всегда необходимо:
связать файл и файловую переменную;
открыть файл для записи или чтения;
обработать файл (записать, прочитать, добавить, удалить);
закрыть файл.
Если несуществующий файл открыть для чтения, то будет ошибка. Чтобы ее избежать, используется директива (указание) компилятора «отключить контроль ошибок ввода/вывода»: {$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. Создать программу обработки файлов, содержащую пункты:
Ввод файла, просмотр файла, поиск минимального слова в каждой строке файла, подсчет слов на указанную букву.