Стандартные процедуры и функции для текстовых файлов

Текстовый файл представляет собой совокупность символов, разделенных на строки, причем в конце каждой строки стоит признак конца строки.

Особенностью работы с текстовыми файлами является то, что переменные, значения которых вводятся и выводятся с помощью процедур READ или WRITE, могут быть не обязательно типа STRING или CHAR, а других простых типов (целых, вещественных при вводе, целых, вещественных, типа BOOLEAN - при выводе).

Две стандартные файловые переменные INPUT и OUTPUT автоматически связаны с клавиатурой и экраном дисплея, т.е. фактически выполняются процедуры:

assign(input,’ ‘); reset(input);

assign(output,’ ‘);rewrite(output);

Эти файлы также автоматически закрываются после окончания работы программы.

Процедуры и функции для организации ввода-вывода текстовых файлов:

READ([var f:text;]v1[v2,…vn]) – считывание осуществляется из связанного с f файла. По умолчанию принята стандартная переменная INPUT. Переменные vi могут иметь тип char, integer, real или string.

Если переменная vi имеет тип char, то READ считывает символ из файла f и присваивает его переменной vi. Если Eof(f)=True, то считывается символ Chr(26). Если Eof(f)=False, то считывается символ Chr(13) (“возврат каретки).

Если vi имеет тип integer, то процедура READ считывает последовательность символов, синтаксически оформленную как целое число со знаком. При этом предшествующие пробелы, табуляции и символы конца строки игнорируются. Считывание последовательности символов заканчивается, если встречается пробел, знак табуляции или символ конца строки, а также если Eof(f)=True. Если считываемая последовательность не удовлетворяет установленному формату (типу), происходит ошибка ввода-вывода.

Если vi имеет тип real, то считываемая последовательность должна быть синтаксически оформлена соответствующим образом. В остальном работа процедуры READ аналогична случаю, когда vi имеет тип integer.

Если vi имеет тип string, то READ считывает строку символов (при этом символ конца строки не считывается). Считанная последовательность символов присваивается переменной vi. Если длина считанной последовательности превосходит длину переменной vi, то последние символы отбрасываются. При последующем обращении к READ считывание продолжается с того места, где оно было остановлено.

Если файл заканчивается раньше, чем выполнение процедуры READ, оставшимся переменным присваивается значение 0.

Примечание. Ели vi имеет тип string, то после считывания строки символов процедура READ не переходит на другую строку. При последующем обращении к первым будет следовать символ конца строки, и поэтому READ будет считывать последовательность нулевой длины (пустую строку). Во избежание такой ситуации следует пользоваться процедурой READLN.

 

WRITE([var f:text]v1[v2,…vn]) – осуществляет запись в файл, связанный с файловой переменной f. Если f опущена предполагается стандартная файловая переменная OUTPUT. Каждый из параметров vi является выражением, значение которого должно записываться в файл. Параметр записи может также содержать указания ширины поля и количества десятичных знаков. Выражения вывода могут быть следующих типов: char, integer, real или string или boolean. Параметр записи имеет следующую форму:

vi[:m[:n]],

где m, n – выражения типа integer. m устанавливает минимальную ширину поля, которая должна быть больше 0. Если m опущено, выделяется число разрядов, достаточное для представления величины vi. n устанавливает количество десятичных знаков в величинах с фиксированной точкой. Оно может быть установлено, только если vi типа real и задано m.

Запись величины типа char. Если m опущено, значение vi типа char записывается в 1 разряд. В противном случае, записываются ещё m-1 пробелов, следующих за значением vi.

Запись величины типа integer. Если m опущено, десятичное представление значения записывается в файл без n предшествующих пробелов. Если m точно определено, и его значение больше, чем количество десятичных разрядов vi, необходимое число пробелов записывается перед этой величиной.

Запись величины типа real. Формат представления зависит от величины n. Если n опущено (или имеет отрицательное значение), записывается десятичная последовательность с плавающей точкой. Если m тоже опущено, то по умолчанию оно предполагается равным 17; в противном случае, если m меньше 8, оно предполагается равным 8.

WRITELN([var f:text]v1[v2,…vn]) – исполняется также как процедура WRITE и в конце записывает метку конца строки в файл. (f) без параметров записывает метку конца строки в файл. WRITELN соответствует WRITELN(Output).

Пример выполнения лабораторной работы №1.

program lab_1;

var x,y,a,b:real;

c1,c2,c3,c4:real;

begin

read(x,y);

c1:=abs(x)/(abs(x)+1);

c2:=arctan(sqrt(1-c1*c1)/c1);

c1:=x*x*x*x;

a:=exp(ln(c1+1)/3)+c2;

c1:=sin(x)/cos(x);

c2:=y*y;

c3:=c1*c1;

c4:=c1/c2;

b:=c4; c4:=c4*c3/c2; b:=b+c4;

c4:=c4*c3/c2; b:=b+c4;

writeln(' a=',a:5:3,' b=',b:5:3)

end.