Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
paskal.doc
Скачиваний:
71
Добавлен:
10.06.2015
Размер:
1.28 Mб
Скачать

Средства работы с нетипизированными файлами

BlockRead(var F : file ; var Buf; Count : word {;Result:word});

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

Использование параметра Result подсказывает, что число считанных блоков может быть меньше, чем задано параметром Count. Если Result указан при вызове, то ошибки ввода-вывода в такой ситуации не произойдет. Для отслеживания этой и других ошибок чтения можно использовать опции {$I-}, {$I+} и функцию IOresult.

BlockWrite(var F : file ; var Buf; Count:word {;Result :word}) ;

Процедура предназначена для быстрой передачи в файл F определенного числа записей из переменной Buf. Все параметры процедуры BlockWrite аналогичны параметрам процедуры BlockRead. Обе процедуры выполняют операции ввода-вывода блоками. Объем блока в байтах определяется по формуле:

06ъем = Count * RecSize,

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

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

Пример программы для работы с типизированными файлами

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

В разделе описания переменных опишем файловую переменную F, представляющую в программе нетипизированный файл вещественных чисел; вещественную переменную Р, которой будет присваиваться значение очередного элемента файла при заполнении файла случайными вещественными числами и искомого элемента файла; целую переменную типа byte К, значения которой будут указывать на номер элемента в файле.

Program UnTyped_File;

Uses Crt;

Var

F : File of real;

P : real;

К : byte;

procedure Mak_file; {Создание файла вещественных чисел}

begin

Assign(F,'a.dat') ;

Rewrite(F) ; {Открыть файл для записи}

Randomize;

for K:=l to 100 do

begin

P:=Random(100) ;

Write(F,P) ; {Записать в файл значение К-го элемента}

end;

Writeln('Создание файла вещественных чисел завершено');

Close(F); {закрыть файл}

end; {конец процедуры Mak_file}

procedure Find_Elem; {Поиск элемента в файле прямого доступа по его номеру}

begin

Assign(F,'a.dat');

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

Readln(К) ;

Reset(F) ;

Seek(F,K-l); {Переместить указатель обработки на К-1-й эле­мент}

Read(F,P); {Присвоить значение элемента, на который указывает указатель обработки переменной Р}

Writeln(K,'-й элемент файла ',Р:6:2) ;

Close(F) ;

end; {процедура Find_Elem}

procedure Find_Fil_P; {Поиск элемента в файле последовательного доступа}

var N : byte;

begin

Assign(F,'a.dat');

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

Readln(К) ;

Reset(F) ;

N:=0; {Поместить указатель обработки в начало файла}

While not Eof(F) do {Повторять, пока не будет просмотрен весь файл}

begin

Read(F,P); {Чтение элемента и смещение указателя обработки вправо на один элемент}

if N=K-1 then {Найден элемент с искомым номером}

begin

Writeln(K,'-й элемент файла равен ',Р:6:2);

Exit; {Прервать поиск, так как элемент найден}

end;

N:=N+1; (Увеличить числа элементов файла на 1}

end;

Close(F);

end ; {конец процедуры Find_Fil_P}

Begin {Основная программа}

Mak_file; {Вызов процедуры создания файла вещественных чисел}

Find_Е1еm; {Вызов процедуры поиска элемента в файле прямого доступа}

Find_Fil_P; {Вызов процедуры поиска элемента в файле с последовательным доступом}

end.

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]