Нетипизированные файлы
Нетипизированные файлы - это файлы, поддержка которых осуществляется с максимально возможной скоростью. Эти файлы не имеют строго определенного типа. Определение нетипизированных файлов в программе: Var Var MyFile : file; Нетипизированные файлы можно открывать и для чтения и для записи
При открытии нетипизированных файлов, необходимо указывать длину записи в байтах (иными словами – размер одного элемента файла). Например, открыть нетипизированный файл, с размером каждой записи в один байт можно так: RewriteReset Rewrite(MyFile, 1) или Reset(MyFile, 1) Если длину записи не указать, то будет принято значение «по умолчанию» байт. То есть все процедуры и функции, обслуживающие такой файл, работают с записями длиной 128 байт. Каждый пользователь для своих программ может выбрать наиболее подходящий размер записи (max байт).
Assign Assign (МуFilе, 'с:\МуDirectory\result.dat') - процедура связывания логической файловой переменной МуFilе с конкретным физическим файлом на дисковом носителе информации; Closе Closе (МуFilе) - процедура, закрывающая открытый файл; Rewrite Rewrite (МуFilе) - процедура, создающая новый файл и открывающая его для записи или чтения; эта процедура имеет дополнительный параметр при работе с нетипизированными файлами, который будет рассмотрен позднее; Reset Reset (МуFilе) - процедура, открывающая существующий файл данных; эта процедура имеет дополнительный параметр при работе с нетипизированными файлами, который будет рассмотрен позднее; Eof Eof (МуFilе) - логическая функция, проверяющая, достигнут ли конец файла;
Seek Seek (МуFilе, n) - процедура, позволяющая явно изменить значение текущего указателя файла, установив его на элемент с номером n; Filesize Filesize(МуFilе) - функция, возвращающая позицию указателя по файлу; нумерация начинается с нуля; Filepos Filepos (МуFilе) - функция, возвращающая количество элементов файла; Rename Rename(МуFilе, FileName) - процедура, позволяющая переименовать существующий файл; Truncate Truncate(МуFilе) - процедура, позволяющая удалить часть существующего файла, начиная с текущей позиции; Erase Erase(МуFilе) - процедура, стирающая указанный файл,
Процедура считывает из файла F определенное число блоков в память, начиная с первого байта переменной Buf. BlockRead BlockRead(Var F : file; Var Buf; Kolblocks : word; result : word); Buf Параметр Buf представляет любую переменную, которая будет участвовать в обмене данными с дисками (как правило - массив). Kolblocks Параметр Kolblocks задает число считываемых блоков, которые должны быть прочитаны за одно обращение к диску. result Параметр result является необязательным и содержит после вызова процедуры число действительно считанных записей. F Переменная F должна быть описана как нетипизированный файл, она должна быть связана с конкретным физическим диском процедурой assign. Файл должен быть открыт процедурой reset.
Процедура предназначена для быстрой передачи в файл F определенного числа записей из переменной Buf. BlockWrite BlockWrite(Var F : file; Var Buf; Kolblocks : word; result : word); Все параметры процедуры BlockWrite аналогичны параметрам процедуры BlockRead. Разница лишь в том, что файл должен быть подготовлен для записи процедурой Rewrite. После завершения процедуры указатель смещается на result записей.
Объем блока в байтах определяется по формуле: Объем = Kolblocks * recSize где recSize - размер записи файла, заданный при его открытии. Суммарный объем разового обмена не должен превышать 64 Кбайт.
Program Uses Var Begin AssignRewrite For todo BlockWrite Close Program Netipiz1; Uses Crt; Var f : file; P, B, k : byte; Begin ClrScr; Randomize; Assign(F, 'MyFile'); Rewrite(F,1); For k := 1 to 100 do begin P := Random(100); BlockWrite(F, P, 1); end; Close(F);
Reset Fortodo BlockReadWrite WriteReadLn SeekBlockRead WriteLn Close End 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.
Program Uses Var Begin ClrScr; Randomize; Fortodo AssignRewrite BlockWrite Close 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 WhileEof BlockRead Inc Close Write ReadLn End. 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.