- •Описание записи (record).
- •Работа с файлами. Общие сведения о файлах.
- •Процедуры и функции для работы с файлами.
- •Особенности обработки типизированных файлов.
- •Создание файла.
- •3. Добавление записей к файлу (в конец файла)
- •If {…запись не удаляется…}
- •Корректировка с использованием последовательного доступа.
- •If {запись не корректируется}
- •If { корректировка подтверждена }
- •О взаимосвязи записей основного обрабатываемого файла и записей файлов-справочников
- •Файлы без типа.
Файлы без типа.
Любой файл может быть представлен в виде последовательности символов кода ASCII. Турбо Паскаль позволяет рассматривать файл с любой организацией как бы состоящим из блоков по 128 байт.
Файлы без типа используются обычно при копировании файлов, когда не важна внутренняя структура записи файла. Если длина сегмента на диске 1024 байта, то количество блоков в группе равно 8 при длине блока 128 символов.
Обмен информацией происходит непосредственно между программой и файлом без использования буферной памяти. Адресация блоков производится по их номерам. Блоки в этом случае являются компонентами файла. Использование файлов без типа приводит к экономии памяти.
Для работы с такими файлами предусмотрены специальные процедуры, позволяющие производить обмен группами блоков по 128 символов.
BLOCKREAD(<имя файла>,<переменная>,<число компонентов>
[,<факт.число>]);
для чтения блока из файла.
BLOCKwrite(<имя файла>,<переменная>,<число компонент>
[,<факт.число>]);
- для записи блока в файл.
Здесь:
<имя файла> - имя файла без типа;
<переменная>- имя переменной для чтения или записи;
<число компонент> - количество передаваемых компонент за один раз;
<фактическое число> - количество фактически переданных записей длиной 128 байт.
Файл для блочного ввода-вывода описывается с типом FILE. Для файла без типа нельзя использовать процедуры READ и WRITE.
VAR
< имя файла > : FILE;
При открытии файла без типа можно указать длину записи файла в байтах. Она указывается вторым параметром при обращении к процедуре Reset или Rewrite, в качестве которого используется выражение типа Word. Если длина записи не указана, она принимается равной 128 байтам.
Рассмотрим пример блочного ввода-вывода. Пусть требуется скопировать данные из файла FromF в файл ToF.
var
Fromfile, Tofile: file;
NR, NWr: Word;
NAME:STRING[12];
Buf: array[1..2048] of Char;
begin
WRITELN ( ' ВВЕДИТЕ ИМЯ ВХОДНОГО ФАЙЛА: ');
READLN(FILENAME);
Assign(Fromfile, FILENAME);
Reset(Fromfile, 1);
WRITE(' ВВЕДИТЕ ИМЯ ВЫХОДНОГО ФАЙЛА: ');
READLN(FILENAME);
assign(Tofile, FILENAME);
Rewrite(Tofile, 1);
repeat
BlockRead(FromF, Buf, SizeOf(Buf), NR);
BlockWrite(ToF, Buf, NR, NWr);
until (NR = 0) or (NWr <> NR);
Close(Fromfile);
Close(Tofile);
end.
В примере программы при открытии файла без типа в вызове процедуры RESET указана длина записи равная 1. В этом случае при копировании файла не будут записаны лишние символы в новый файл.
Вопрос: ЧТО ЗА УСЛОВИЯ СТОЯТ В ЦИКЛЕ UNTIL ?
(«физический смысл»)
