RLE encode decode
type
symbol=record
count:byte;
value:byte;
end;
Function sizeoffile(filename:string):integer;
var t:file of byte;
a:byte;
c:integer;
begin
AssignFile(t,filename);
Reset(t);
while not eof(t) do
begin
read(t,a);
inc(result);
end;
CloseFile(t);
end;
Function Encode(input:string;output:string):string;
var
INFILE, OUTFILE: file of byte;
b1, b2: byte;
count: byte;
begin
AssignFile(INFILE,input);
AssignFile(OUTFILE,output);
rewrite(OUTFILE);
if FileExists(input) then
begin
count:=1;
reset(INFILE);
read(INFILE, b1); //считываем первый байт
while not eof(INfile) do //пока не закончится файл
begin
read(INFILE, b2); //считываем байт
if b1=b2 then //если равны
begin
if count=254 then
begin
write(OUTFILE, count); //записываем сколько раз повторяется байт
write(OUTFILE, b1); //записываем сам байт
b1:=b2; //приравниваем для последующего сравнения b1 и b2
count:=1;
end
else
begin
inc(count);
end;
end
else //если b1<>b2 то
begin
write(OUTFILE, count);
write(OUTFILE, b1);
b1:=b2;
count:=1;
end;
end;
write(OUTFILE, count);
write(OUTFILE, b1);
CloseFile(INFILE);
CloseFile(OUTFILE);
Writeln('Вес файла до кодирования:',sizeoffile(input),' байт');
Writeln('Вес файла после кодирования:',sizeoffile(output),' байт');
end;
end;
Function Decode(input:string;output:string):string;
var
INFILE: file of symbol;
OUTFILE: file of byte;
b1, i: byte;
s: symbol;
begin
AssignFile(INFILE,input);
AssignFile(OUTFILE,output);
rewrite(OUTFILE);
if FileExists(input) then //если файл существует
begin
reset(INFILE); //открываем файл
while not(eof(INFILE)) do //пока не закончится файл
begin
i:=1;
read(INFILE,s); //считываем количество повторений и сам байт
b1:=s.value; //приравниваем к переменной байт
repeat
write(OUTFILE,b1);//записываем байт пока не кончатся повторения
inc(i);
until i>s.count;
end;
CloseFile(INFILE);
CloseFile(OUTFILE);
end;
Writeln('Вес заархивированного файла:',sizeoffile(input),' байт');
Writeln('Вес разархивированного файла :',sizeoffile(output),' байт');
end;
var input,output:string;
s:string;
exite:string;
begin
repeat
write('Кодируем-1,Декодируем-2,Выход-3: ');
readln(s);
if s='3' then
break;
Write('Введите имя исходного файла: ');
Readln(input);
Write('Введите имя нового файла: ');
readln(output);
if s='1' then
Encode(input,output);
if s='2' then
Decode(input,output);
writeln('Выйти?Y\N');
readln(exite);
until exite='Y' ;
end.
Теги:
OUTFILE,
begin,
input,
INFILE,
count,
string,
output,
write,
файла,
CloseFile,
AssignFile,
байт,
sizeoffile,
Writeln,
then,
exite,
readln,
записываем,
считываем,
файл,
Function,
while,
symbol,
Write,
Введите,
repeat,
приравниваем,
Encode,
кодирования,
until,
Decode,
value,
integer,
rewrite,
reset
Комментарии:
Нету комментариев для вывода...