Практика программирования (Бейсик, Си, Паскаль)



         

Основные типы файлов в Паскале - часть 2


Программа 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 и имеется возможность прямого доступа к любой записи. Для этого перед операцией обмена указатель файла перемещается на начало нужной записи:




Содержание  Назад  Вперед