Язык Pascal позволяет вводить исходные данные для программы не только с клавиатуры, но и из текстового файла.
Открытие файла для ввода (чтения) выполняется вызовом процедуры reset, имеющей один параметр – файловую переменную.
Формат:
Reset(<имя файловой переменной>);
Например:
Assign(f,’c:\data.txt’);
Reset(f);
Если имя файла указано неверно, т.е. файла с таким именем нет на диске, то возникает ошибка времени выполнения программы. Как и при открытии файла для добавления, программа может взять на себя задачу обработки возможной ошибки при открытии файла, используя функцию IOResult.
Пример. Демонстрация использования функции IOResult при открытии файла.
Label fin;
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
WriteLn(‘ОШИБКА: файл ’,fname,’ не найден или диск не готов’);
WriteLn(‘Повторить попытку?(д/н)-> ’);
Readln(otv);
End;
Until (res=0) or (otv=’н’);
If res<>0 then goto fin;
{здесь операторы программы}
Fin:
End.
Чтение из файла выполняется при помощи процедур read и readln.
Следует помнить, что в текстовом файле находятся не числа, а их изображения. Действие процедур read и readln состоят из двух:
из файла читаются символы до появления разделителя (пробела или конца строки)
прочитанные символы, являющиеся изображением числа, преобразуются в число, и полученное значение присваивается переменной.
Отличие процедуры ReadLn от Read в том, что при считывании последнего числа процедурой ReadLn происходит переход к следующей строке файла.
Например, пусть файл ishod.txt такой:
12 5 97 10
15 5 97 12
Во время выполнения программы
Var
F:text;
a,b,c:integer;
Begin
Assign(f,’ishod.txt’);
Reset(f);
Read(f,a);
Readln(f,b);
Read(f,c);
End.
Переменная а получит значение 12, b-5, c-15.
Если при чтении значения переменной в файл вместо изображения числа будет какая-то последовательность символов, то происходит ошибка.
В программе строковая переменная может быть описана с указанием длины или без. Например: str1:string[10] или str2:string. При чтении из файла значения строковой переменной, длина которой явно задана в описании переменной, из файла читается столько символов, сколько указано в описании, но не больше, чем в оставшейся непрочитанной части текущей строки.
При чтении из файла значения строковой переменной, длина которой явно не задана в описании переменной, значением переменной становится оставшаяся после последнего чтения часть трущей строки