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
Добавлено: 21 Ноября 2015 21:23:50 Добавил: Илья Добряк Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...