Поиск по этому блогу

суббота, 19 ноября 2016 г.

Ввод из файла



Язык 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.

Комментариев нет:

Отправить комментарий