Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






Процедура BlockWrite.




Формат обращения:

blockwrite(Var F: file; Var Buf; Kolblocks: word; result: word);

Процедура предназначена для быстрой передачи в файл F определенного числа записей из переменной Buf. Все параметры процедуры blockwrite аналогичны параметрам процедуры blockread. Разница лишь в том, что файл должне быть подготовлен для записи процедурой rewrite. Содержимое переменной Buf целиком помещается в файл, начиная с текущей записи.

Обе процедуры выполняют операции ввода-вывода блоками. Объем блока в байтах определяется по формуле:

Объем = Kolblocks * recSize,

где recSize – размер записи файла, заданный при его открытии. Суммарный объем разового обмена не должен превышать 64 Кбайт. Помимо скорости передачи данных преимущество этих процедур заключается в возможности пользователя самостоятельно определять размер буфера для файловых операций. Эта возможность играет значительную роль в тех задачах, где необходимо жесткое планирование ресурсов. Программист должен позаботиться о том, чтобы длина внутреннего представления переменной Buf была достаточной для размещения всех байт при чтении информации с диска.

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

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

После завершения процедуры указатель смещается на result записей.

Рассмотрите примеры простых задач.

Задача № 1. Составить программу, которая создает нетипизированный файл из 100 чисел и выводит на экран k-ый элемент.

Program Netipiz1;

Uses

Crt;

Type

FileType = file;

Var

f: FileType;

P, B, k: byte;

Begin

ClrScr;

assign(F, 'MyFile');

rewrite(F,1);

Randomize;

for k:= 1 to 100 do

begin

P:= Random(100);

blockwrite(F, P, 1);

end;

close(F);

reset(F,1);

for k:= 1 to 100 do

begin

blockread(F, P, 1);

write(p,' ');

end;

write('Введите номер нужного элемента ');

readln(k);

Seek(F, k-1);

blockread(F, P, 1);

writeln(k,'-ий элемент файла равен ', P);

close(F);

End.

Задача № 2. Составить программу, которая создает копию элементов нетипизированного файла f и помещает в файл g.

Program Netipiz2;

Uses

Crt;

Var

f, g: file;

Stroka1, sб Stroka2: string;

Begin

ClrScr;

write('Введите имя исходного файла');

read(Stroka1);

assign(f, Stroka1);

rewrite(f,1);

write('Введите содержимое файла ');

repeat

readln(s);

blockwrite(f, s, 1);

until readKey = #27;

close(f);

reset(f,1);

write('Введите имя конечного файла');

read(Stroka2);

assign(g, Stroka2);

rewrite(g,1);

while not Eof(f) do

begin

blockread(f, s, 1);

blockwrite(g, s, 1);

end;

close(f);

close(g);

write('Содержимое конечного файла:');

while not Eof(g) do

begin

blockread(g, s, 1);

write(s);

end;

readln;

End.

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

Program Netipiz3;

Uses

Crt;

Var

f: file;

i, k, s: integer;

Mas: Array [1..10] of byte;

Begin

ClrScr;

Randomize;

for i:= 1 to 10 do

Mas[i]:= Random(10);

assign(f, 'file.dat');

rewrite(f,1);

blockwrite(f, Mas, 10);

close(f);

reset(f,1);

while not Eof(f) do

begin

blockread(f, k, 1);

s:= s+k;

Inc(i);

end;

close(f);

write(s/i:5:2);

readln;

End.

Задание. Наберите программу, содержащую все рассмотренные выше задачи, усовершенствуйте решение, разбейте ее на процедуры (ввод, вывод, поиск), дополните комментариями. Проверьте правильность работы программы. Покажите учителю рабочий файл и листинг программы для оценки.






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных