Язык Pascal позволяет вводить исходные данные для программы не только с клавиатуры, но и из текстового файла. Чтобы воспользоваться этой возможностью, нужно объявить файловую переменную типа text, назначить ей при помощи инструкции assing имя файла, из которого будут читаться данные, открыть файл для чтения (ввода) и прочитать (ввести) данные, используя инструкцию read или readln.
Рассмотрим это по подробнее.
Открытие файла
Открытие файла для ввода (чтения) выполняется вызовом процедуры reset, имеющей один параметр – файловую переменную. Перед вызовом процедуры reset файловой переменной назначается имя файла вызовом процедуры assing.
Пример:
assing(f,’c:\data.txt’);
reset(f);
Если имя файла указано неверно, то возникает ошибка. Эту ошибку можно обработать программным способом. Например, вот так:
{ Демонстрация использования IOResult при открытии файла }
program iores;
label
konec;
var
f:text;
fname:string[80]; { имя файла}
res:integer; { результат открытия файла }
otv:char; { ответ на предложение повторить
попытку открыть файл }
begin
fname:= 'a:\test.txt';
assign(f,fname);
repeat
{$I-}
reset(f); { открыть файл для чтения }
{$I+}
res:=IOResult;
if res<>0
then begin
write('ОШИБКА: файл ',fname, ' не найден');
writeln(' или диск не готов.');
write('Повторить попытку?(д/н)');
readln(otv);
end;
until (res=0) OR (otv='н');
if res<>0 then goto konec;
{ здесь инструкции программы }
konec:
end.
Чтение из файла
Чтение из файла выполняется при помощи инструкций read и readln, которые в общем виде записываются так:
read(ФайловаяПеременная, СписокПеременных);
readln(ФайловаяПеременная, СписокПеременных);
где ФайловаяПеременная – переменная типа text; СписокПеременных – имена переменных, разделенных запятыми.
Конец файла
Пусть на диске есть текстовый файл, содержащий информацию о доходах. Каждая строка файла начинается с цифры, соответствующей величине дохода, за которой следует строка символов – комментарии. Содержание файла может быть таким:
250 Чтение лекций
1000 Гонорар за книгу
120 Доход по акциям ГАЗПРОМ
Пусть нужно вычислить суммарный доход. Решение задачи довольно очевидно: открыть файл, прочитать число из первой строки и добавить его к сумме, прочитать число из второй строки и добавить его к сумме и т.д. После прочтения последней строки выдать результат.
Но как определить, что прочитана последняя строка, или, другими словами, достигнут конец файла?
Для этого нужно проверить значение, возвращаемое функцией EOF (End Of File – конец файла), описание которой выглядит так:
function EOF(var f:text):boolean;
У функции EOF один параметр – файловая переменная. Функция EOF возвращает TRUE, если достигнут конец файла, иначе – FALSE.
Листинг решения вышеописанной задачи:
{ Чтение из файла (использование функции EOF) }
{
Перед запуском программы необходимо создать
базу данных - текстовый файл incom.txt
}
program rdfromf;
var
f:text; { файловая переменная }
incom:real; { доход из очередной строки файла}
summ:real; { суммарный доход }
begin
assign(f,'incom.txt');
{$I-}
reset(f); {откроем для чтения}
{$I+}
if IOResult=0 then
begin
summ:=0;
writeln('Чтение данных.');
while NOT EOF(f) do{пока не достигнут конец файла}
begin
readln(f,incom);
summ:=summ+incom;
end;
close(f);
writeln('Суммарный доход: ',summ:11:2);
end
else writeln('Ошибка открытия файла.');
end.
Комментариев нет:
Отправить комментарий