ТОР 5 статей: Методические подходы к анализу финансового состояния предприятия Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века Характеристика шлифовальных кругов и ее маркировка Служебные части речи. Предлог. Союз. Частицы КАТЕГОРИИ:
|
Занятие 4. Использование текстовых файлов в качестве нетипизированных.Рассмотрите пример. Задача. Из текстового файла прочитать находящиеся там символы, заменить их на символы, отличающиеся своими кодами от исходных на определенную величину, меняющуюся от символа к символу (шифрация методом простой одноалфавитной подстановки). Поместить эти символы в новый файл, разместив в нем предварительно число перекодированных символов и таблицу смещений кодов. Program Kodirovka; Const NofCod = 20; {Размер таблицы смещений кодов} Var FirstFile: text; {Исходный файл} SecondFile: file; {Результирующий файл} FirstName, 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('Нет места на диске '); 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, FirstName); 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); {Перекодировка символов и запись содержимого полных буферов в файл} 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)+Codes[i]) mod 256); end; if i = NofCod then begin writeAndControl(Buffer, NofCod); i:= 0; end; {Запись в файл завершающей части символов} if i <> 0 then begin writeAndControl(Buffer, i); {Запись числа символов} NofSymb:= FileSize(SecondFile)-NofCod-4; Seek(SecondFile, 0); writeAndControl(NofSymb, 4); {Завершение программы} close(SecondFile); writeln('Конец работы программы '); readln; End. В этой программе в результирующий файл окончательно будут записаны: общее количество перекодированных символов, таблица смещений кодов символов и перекодированные символы. Файл используется как файл без типа с размером блока в 1 байт, который устанавливается процедурой rewrite. Не нашли, что искали? Воспользуйтесь поиском:
|