Занятие 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.








Дата добавления: 2015-05-16; просмотров: 689;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.007 сек.