Текстовые файлы
Рассмотрим текстовые файлы, т.е. файлы, состоящие из строк. Каждая строка заканчивается символами с кодами #10 и #13. Оканчивается файл признаком конца файла EOF (EOF – End Of File).
строка1 #13 #10
строка2 #13 #10
………………
EOF
Для работы с файлами надо:
Установить связь программы с файлом
“Открыть” файл для чтения или записи
Читать из файла или записать в файл
Закрыть файл.
Рассмотрим следующие процедуры:
Assign (f, ’c:\file.dat’) – связывает внешний файл с файловой переменной f.
Reset (f) – открывает файл только для чтения.
Rewrite (f) – открытие файла только для записи.
Append(f) – открытие файла для пополнения.
Close (f) – закрытие файла.
Write (f, x) – записывает в файл f значение x
Writeln (f,x) - ……………..(аналогично)
Read (f,x) – читает данные из файла f и помещает прочитанное в переменную x.
Readln (f,x) - ……………(аналогично)
Фукции:
Eof(f) – True, если указатель находится в конце файла.
Eoln(f) – True, если указатель находится в конце строки.
Существуют два способа доступа к файлам – последовательный и прямой. Текстовые файлы допускают только последовательный доступ, т.е. для нахождения определенного элемента такого файла нужно просмотреть все, что ему предшествовало. Файлом прямого доступа называется файл, доступ к элементам которого осуществляется по адресу элемента. Например, при поиске нужного элемента в файле достаточно указать номер его позиции.
В текстовый файл можно записать (или считать из него) информацию любого типа. Если эта информация не символьная, например числа, то она будет преобразована в символьную.
Текстовый файл можно создать или преобразовать с помощью текстового редактора.
Пример. Файл file.txt содержит текст. Посчитать количество строк в тексте.
program….
var f1:text;
k:integer;
begin
assign (f1, ‘c:\temp\file.txt’);
reset (f1);
k:=0;
while not Eof(f1) do
begin
readln(f1);
k:=k+1; {считаем количество символов в строке}
end;
writeln(‘Количество строк =’, k);
close(f1);
end.
Пример. В текстовом файле file.txt определить длину самой большой строки.
program ….
var f1:text;
max, k:integer;
c:char;
begin
assign (f1, ‘c:\temp\file.txt’);
reset (f1);
max:=0;
while not Eof(f1) do
begin
k:=0;
while not Eof(f1) do {каждая строка прочитывается посимвольно}
begin
read(f1, c);
k:=k+1; {считаем количество символов в строке}
end;
if k>max then max:=k;
readln(f1);
end;
writeln(‘Наибольшая строка имеет’, max, ‘знаков’);
close(f1);
end.
Замечание: в этом примере строки прочитываются посимвольно, т.к. var с: char (можно считывать всю строку, тогда var c: string,
readln(f1,c); k:=length(c), без второго цикла while).
Пример. Составить программу, в которой создается текстовый файл, состоящий из действительных чисел и определяется сумма чисел из этого текстового файла.
Program File_2;
var
ftext:text;
name:string[8];
Procedure OpenFile;
{Процедура открытия для записи файла }
begin {OpenFile}
write (‘введите имя файла’);
write (‘(не более 8 символов); ’ );
read (name);
assign (ftext, ‘c:\temp\name.txt’);
{файловая переменная ftext связывается с именем файла}
rewrite (ftext);
{файл открывается для записи}
end; {OpenFile }
Procedure WriteToFile
{процедура ввода данных в текстовый файл}
var
x:real;
begin { WriteToFile }
write (‘последовательно вводите’);
writeln (‘действительные числа.’);
write (‘ввод каждого числа завершайте’);
writeln (‘нажатием клавиши Enter.’);
write (‘для окончания ввода данных’);
writeln (‘нажмите клавиши Ctrl+Z и Enter’);
while not Eof do
begin
readln(x); {ввод очередного числи с клавиатуры}
writeln(ftext,x:5:2); {запись очередного числа в файл}
end;
close(ftext) {файл закрывается}
end; { WriteToFile }
Procedure ReadFile;
{процедура открывает для чтения текстовый файл и выводит на экран содержащиеся в нем числа, а так же определяет их сумму}
var
s, sum: real;
begin {ReadFile}
sum:=0;
reset (ftext); {файл открывается для чтения}
write (‘Файл ’, name:9);
writeln (‘содержит следующие числа‘ );
while not Eof do
begin
readln (ftext,x); {чтение очередного числа их файла}
writeln (x:10:5); {вывод очередного числа на экран}
sum:=sum+x; {вычисление суммы}
end;
writeln (‘сумма чисел в файле: ’, sum:10:5);
end; {ReadFile}
begin {Program}
write (‘определение суммы чисел ’);
write (‘содержащихся в’);
writeln (‘текстовом файле’);
writeln;
OpenFile;
WriteToFile;
RwadFile:
readln;
end. {Program}
