Нетипизированный файл рассматривается в Паскале как совокупность символов или байтов. Выбор char или byte не играет никакой роли, важен лишь объем занимаемых данных. Var MyFile : file; Такое представление на практике это приводит к тому, что любой файл, подготовленный как текстовый или типизированный, можно открыть и начать работу с ним, как с нетипизированным набором данных.
Для нетипизированных файлов не нужно терять время на преобразование типов и поиск управляющих последовательностей, достаточно считать содержимое файла в определенную область памяти. Нетипизированный файл является файлом прямого доступа, что говорит о возможности одновременного использования операций чтения и записи.
Для таких файлов самым важным параметром является длина записи в байтах. Открытие нетипизированного файла с длиной записи в 1 байт можно выполнить следующим образом: rewrite(MyFile, 1) или reset(MyFile, 1) Второй параметр, предназначенный только для использования с нетипизированными файлами, задает длину записи файла на сеанс работы. Минимально возможным объемом для считывания являются 128 байт, максимальной длины байтами.
Процедуры и функции assign (МуFilе, 'с:\МуDirectory\result.dat') closе (МуFilе) rewrite (МуFilе) reset (МуFilе) eof (МуFilе) seek (МуFilе, n) filepos (МуFilе) - функция, возвращающая позицию указателя файла; нумерация начинается с нуля; filesize(МуFilе) - функция, возвращающая количество элементов файла; rename(МуFilе, FileName) - процедура, позволяющая переименовать существующий файл; truncate(МуFilе) - процедура, позволяющая удалить часть существующего файла, начиная с текущей позиции и до конца файла; erase(МуFilе) - процедура, стирающая указанный файл,
Процедура BlockRead Процедура считывает из файла F определенное число записей в память, начиная с первого байта переменной Buf. Переменную Buf нужно описать в программе так, чтобы ее размер не был меньше размера записи, установленного в параметрах rewrite или reset. Параметр Kol задает число считываемых записей. Параметр result является необязательным и содержит после вызова процедуры число действительно считанных записей. Blockread (Var F : file; Var Buf; Kol : word; result : word); Формат обращения:
Процедура BlockWrite blockwrite(Var F : file; Var Buf; Kol : word; result : word); Процедура предназначена для быстрой передачи в файл F определенного числа записей из переменной Buf. Все параметры процедуры BlockWrite аналогичны параметрам процедуры BlockRead. Содержимое переменной Buf в количестве Kol записей помещается записей. Формат обращения:
Объем блока в байтах определяется по формуле: Объем = Kol * recSize где recSize - размер записи файла, заданный при его открытии. Суммарный объем разового обмена не должен превышать 64 Кбайт.
Задача 1. Составить программу, которая создает нетипизированный файл из 100 чисел и выводит на экран k-ый элемент Program Netipiz1; Uses Crt; Type FileType = file; Var f : FileType; P, k : byte; Begin 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; s : char; Stroka1, Stroka2 : string; Begin write('Введите имя исходного файла:'); readln(Stroka1); assign(f, Stroka1); rewrite(f, 1); writeln('Введите содержимое файла '); readln(s); while s 13 do begin blockwrite(f, s, 1); readln(s); end; 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); reset(g, 1); writeln('Содержимое конечного файла:'); while not Eof(g) do begin blockread(g, s, 1); write(s); end; close(g); 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 begin Mas[i] := Random(10); write(Mas[i]:3); end; assign(f, 'file.dat'); rewrite(f, 1); blockwrite(f, Mas, 10); close(f); reset(f,1); S:=0; i:=0; while not Eof(f) do begin blockread(f, k, 1); s:= s+k; Inc(i); end; close(f); writeln; write(s/i:5:2); readln; End.