Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 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.






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных