Материал: Методические указания к лабораторным работам № 5-6 по дисциплине «Информатика» для студентов направления подготовки 11.03.03. Ромащенко М.А

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

close(F);

writeln('Из файла прочитан следующий массив'); for J:=1 to I do

write('M[',J,']=',M[J],' '); readln;

end.

Отличие процедуры ReadLn в том, что после считывания последней переменной оставшаяся часть строки до маркера EOLN пропускается, поэтому следующее обращение к Read или ReadLn начинается с первого символа новой строки. Для пропуска текущей строки можно вызвать процедуру ReadLn без списка ввода.

Пример программы определения объема текстового файла в учетных издательских листах (1 уч. изд. лист = 40000 знаков).

Program Rukopis; var

F: text;

name, S: String; {для имени файла и для хранения прочитанной строки} Sum: LongInt;{счетчик количества символов}

begin

writeln('Введите имя файла'); readln(name);

assign(F, name); reset(F);

while not EOF(F) do begin

readln(F, S); Sum:=Sum+Length(s);

end;

close(F);

writeln('Объем', Sum/4000:7:3, ' учетных издательских листов'); readln;

end.

Процедура Write обеспечивает запись информации в текстовый файл.

Write(файловая переменная, <список вывода>);

Отличие процедуры WriteLn в том, что после ее выполнения курсор переходит на новую строку. Использование процедуры WriteLn без списка

14

вывода в файл будет записана пустая строка.

Пример программы наполнения и чтения текстового файла

Program Rabota_s_textom; var

F: text; S: String; i: integer;

begin

assign(F, 'Text.txt'); rewrite(F);

writeln('Введите три строки, которые запишутся в файл text.txt'); writeln('Внимание! Файл text.txt должен быть предварительно создан!'); for i:=1 to 3 do

begin readln(S);

writeln(F, S); end;

close(F);

reset(F);

writeln('А теперь выводится текст из файла'); while not EOF(F) do

begin

readln(F, S); writeln(S);

end;

close(F);

readln;

end.

Задание 4 – изучить особенности типизированных файлов языка Паскаль.

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

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

Процедура Read обеспечивает чтение очередных компонентов

15

типизированного файла

Read(файловая переменная, <список ввода>).

Список ввода должен содержать одну или более переменных такого же типа, что и компоненты файла. Файловая переменная должна быть объявлена предложением file of… и связана с именем файла процедурой assign. Файл необходимо открыть процедурой reset.

Процедура Write используется для записи данных в типизированный

файл.

Write(файловая переменная, <список вывода>);

Процедура Seek смещает указатель файла к требуемому компоненту.

Seek(файловая переменная, <N компонента>);

N компонента – выражение типа LongInt указывающее номер компонента файла. Первый компонент файла имеет номер 0.

Функция FileSize возвращает значение типа LongInt которое содержит количество компонентов файла.

FileSize(файловая переменная);

Функция FilePos возвращает значение типа LongInt содержащее порядковый номер компонента файла, который будет обрабатываться следующей операцией ввода-вывода.

FilePos(файловая переменная);

Пример программы, которая создает новый файл для размещения целых чисел, наполняет его случайным числами и затем выводит его содержимое на экран.

Program Files; const

N=20;

var

F: file of Integer; I, K: integer;

begin

16

assign(F, 'data.dat'); rewrite(F);

for K:=1 to N do begin

I:=random(100); write(F, I);

end;

close(F);

reset(F);

while not EOF(F) do begin

read(F, I); writeln(I);

end;

close(F);

readln;

end.

Задание 5 – изучить особенности нетипизированных файлов языка Паскаль.

Подобные файлы объявляются как файловые переменные типа file и отличаются тем, что для них не указан тип компонентов. Отсутствие типа делает эти файлы, с одной стороны, совместимыми с любыми другими файлами, а с другой позволяет организовать высокоскоростной обмен данными между диском и памятью.

При инициализации нетипизированного файла с помощью процедуры reset или rewrite можно указать длину записи нетипизированного файла в байтах. Пример

F: file;

……….

assign(F, 'myfile.dat'); rewrite(F, 512);

Если длина записи не указана она принимается равной 128 байт.

При работе с нетипизированными файлами могут применяться все процедуры и функции, доступные типизированным файлам, за исключением Read и Write, которые заменяются соответственно высокоскоростными процедурами BlockRead и BlockWrite.

17

BlockRead(файловая переменная, буфер, N, [NN]);

BlockWrite (файловая переменная, буфер, N, [NN]);

Буфер это имя переменной, которая будет участвовать в обмене данными с файлом; N – количество записей, которые должны быть прочитаны или записаны за одно обращение к файлу; NN – необязательный параметр, содержащий при выходе из процедуры количество фактически обработанных записей.

За одно обращение к процедурам может быть передано до N*RECS байтов, где RECS – длина записи нетипизированного файла. Передача идет начиная с первого байта буфера. При завершении процедуры указатель смещается на NN записей. Процедурами Seek, FilePos и FileSize можно обеспечить доступ к любой части нетипизированного файла.

Пример программы, которая готовит массив buf из N случайных целых чисел и записывает его в нетипизированный файл. Затем массив buf очищается, в него читается содержимое файла и массив выводится на экран строками по 10 чисел.

Program Files; const

N=50;

var

F: file;

I, K: integer;

BUF: array [1..N] of Integer;

begin

for K:=1 to N do BUF[K]:=random(100);

assign(F, 'untyped.dat'); rewrite(F, 1);

blockwrite(F, BUF, SizeOf(BUF)); close(F);

for K:=1 to N do BUF[K]:=-1;

reset(F);

blockread(F, BUF, SizeOf(BUF), K); close(F);

for K:=1 to N do begin

write(BUF[K], ' ');

if K mod 10=0 then writeln;

18

Смотрите также:

0501_5+6
1-1
11
11 Горм +
113
1198
14
1433
1511
1632