Информатика на пять О нас
 Добавить в избранное
5byte.ru
 Теория
 8 класс
 9 класс
 10 класс
 11 класс
Задания
 8 класс
 9 класс
 10 класс
 11 класс
Книги
Тесты
ЕГЭ
Turbo Pascal 7
 Описание
 Задачи
HTML
Рефераты

11.4. Стандартные процедуры и функции для файлов без типа

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

ПРОЦЕДУРЫ

BlockRead (F, Buf, N [ ,Result]) - чтение из файла компонент. Из файла, с которым связана файловая переменная F, читаются N или менее (если при чтении будет достигнут конец файла) компонент и помещаются в буфер. В качестве буфера используется переменная Buf подходящего размера. Необязательный параметр Result возвращает фактическое количество прочитанных компонент. Максимальный размер переносимой информации равен N * Size (см. процедуры Reset и Rewrite) и не должен превышать 65535 байт. После выполнения процедуры указатель текущей компоненты файла перемещается на соответствующее количество прочитанных компонент.

Block Write (F, Buf, N [, Result]) - запись в файл компонент. В файл, с которым связана файловая переменная F, записываются N или менее (если в процессе записи будет до конца заполнен диск) компонент из буфера Buf. Необязательный параметр Result возвращает фактическое количество записанных компонент. Максимальный размер переносимой информации равен N * Size (см. процедуры Reset и Rewrite, где описан параметр Size) и не должен превышать 65535 байт. После выполнения процедуры указатель текущей компоненты файла перемещается на соответствующее количество записанных компонент.

Seek(F, Num) - настройка на требуемую компоненту файла. Аналогична процедуре Seek для типизированных файлов.

Truncate(F) - удаление части файла, начиная с текущей позиции. Аналогична процедуре Truncate для типизированных файлов.

ФУНКЦИИ

FilePos (F) - получение номера текущей компоненты файла. Аналогична функции FilePos для типизированных файлов.

FileSize(F) - получение текущего размера файла. Аналогична функции FileSize для типизированных файлов. Как указывалось выше, при работе с файлами без типа в процедурах Reset и Rewrite можно использовать дополнительный параметр, определяющий размер одной компоненты записи в байтах.

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

program EXAMPLE19;
Const
  NOfCod = 20           {Размер таблицы смещений кодов}
var FirstFile: Text;             {Исходный файл}
  SecondFile: file;              {Результирующий файл}
  FirstName: string;
  SecondName: string;
  IORes: Byte;               {Код результата работы с файлом}
  NOfSymb: Longint;             {Число символов в файле}
  Codes: array[1..NOfCod] of Byte;
                           {Таблица смещений кодов символов}
  Buffer: array[1..NOfCod] of Char             {Буфер для символов}
  i: Word;

{Процедура записи в файл с проверкой)

procedure WriteAndControl (var Buf; Amount: Word);
var Result: Word;              {Число переданных символов}
begin
  BlockWrite(SecondFile, Buf, Amount, Result);
  if Result <> Amount then
    begin
      WriteLn('Heт места на диске');
      Halt
    end
end;
begin

{ Связь с исходным текстовым файлом для чтения }

  repeat
    {$I-}
    Write('Имя исходного файла: ');
    ReadLn(FirstName);
    Assign(FirstFile, FirstName);
    Reset(FirstFile);
    {$I+}
    IORes := IOResult;
    if IORes <> 0 then
      WriteLn('Такого файла нет')
  until IORes = 0;

{ Связь с результирующим файлом без типа для записи }

  Repeat
    {$I-}
    Write('Имя результирующего файла: ');
    ReadLn(SecondName);
    Assign(SecondFile, SecondName);
    Rewrite(SecondFile, 1); {Размер блока в один байт}
    {$I+}
    IORes := IOResult;
    if IORes <> 0 then
      WriteLn('Неправильное имя файла')
  until IORes = 0;

{ Установка счетчика символов и запись его в файл }

  NOfSymb := 0;
  WriteAndControl(NofSymb, 4);

{ Задание таблицы смещений кодов символов, запись ее в файл }

  Randomize;
  for i := 1 to NOfCod do
    Codes[i] := Random(256);
    WriteAndControl(Codes, NOfCod);

{ Перекодировка символов и запись содержимого полных буферов в файл}

  i := 0;
  while not Eof(FirstFile) do
    begin
      Inc(NOfSymb);
      Inc(i);
      if Eoln(FirstFile) then
        begin
          Buffer[i] := Chr((13 + Codes[i]) mod 256);
          if i = NOfCod then
            begin
              WriteAndControl(Buffer, NOfCod);
              i := 0
            end;
          Inc(i);
          Buffer[i] := Chr((10 + Codes[i]) mod 256);
          ReadLn(FirstFile)
        end
      else
        begin
          Read(FirstFile, Symbol);
          Buffer[i] := Chr((Ord(Symbol) + Codesti]) mod 256)
        end;
      if i = NOfCod then
        begin
          WriteAndControl(Buffer, NOfCod);
          i := 0
        end
    end;

{ Запись в файл завершающей части символов }

  if i <> 0 then
    WriteAndControl(Buffer, i);

{ Запись числа символов }

  NOfSymb := FileSize(SecondFile) - NOfCod - 4;
  Seek(SecondFile, 0);
  WriteAndControl(NOfSymb, 4);

{ Завершение программы }

  Close(SecondFile);
  WriteLn('Конец работы программы');
  ReadLn
end.

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



 У Вас есть материал пишите нам
 
    Copyright © 2008    
Rambler's Top100