Программа 7_01.pas демонстрирует ошибку, напоминающую сбои в работе программы 7_01.bas. Отсутствие явных разделителей между символьной и числовой информацией приводит к непредусмотренному сдвигу данных (в переменную ь считывается первая файловая строка целиком) и попытке чтения числового значения ki из начала второй строки файла. Но Паскаль в отличие от Basic жестко контролирует соответствие типов и выдает сообщение invalid numeric format (Неправильный числовой формат) на первом же операторе readin.
Программа 7_01.pas
program bad_file;
uses Crt;
var
j,kl,k2:integer;
f:text;
b:string; begin
clrscr;
assign(f,'pas_txt') ;
rewrite(f);
for j :=1 to 10 do
begin
writeln('Строка',j:4,j*2:4);
writeln(f, 'Строка', j:4,j *2:4) ;
{или write(f,'Строка');
write(f,j:4);
writeln(j*2:4};
} end;
close(f);
writeln;
reset(f);
for j:=1 to 10 do begin
readln(f,b,kl,k2);
writeln(b,kl:4,k2:4);
end;
close(f);
readln;
end.
В программе 7_02.pas ошибка исправлена за счет изменения порядка числовых и символьных данных, но два текстовых значения в пределах одной строки ничем разделить нельзя. Заключение текста в одинарные кавычки ситуацию тоже не спасает.
Программа 7_02.pas
program txt_file;
uses Crt;
var
j,k1,k2:integer;
f:text;
b:string; begin
clrscr;
assign(f,'pas_txt');
rewrite(f);
for j:=1 to 10 do
begin
writeln(f,j:4,j*2:4,'Строка':8);
writeln(j:4,j*2:4,'Строка':8);
end;
close (f) ;
writeln;
reset(f);
for j:=1 to 10 do begin
readln(f,kl,k2,b);
writeln(kl:4,k2:4,b:8);
end;
close(f);
readln;
end.
Типизированные (записеориентированные) файлы в Паскале
Шаблон записи объявляется в разделе описания типов:
type
qq=record
a:string[6];
n:integer;
r:real;
end;
Для работы с типизированным файлом вводится файловая переменная (fl:fiie of qq;), которая связывается с дисковым файлом (assign(f1, 'pas_rec') ,-). Файл для ввода открывается оператором reset (f1), а для вывода — оператором rewrite (f1),. Обмен с записеориен-тированным файлом производится операторами read/write, в списках которых можно указывать только переменные типа "запись". Записи в типизированном файле нумеруются от 0 и имеется возможность прямого доступа к любой записи. Для этого перед операцией обмена указатель файла перемещается на начало нужной записи: