Einzelnen Beitrag anzeigen

Popov
(Gast)

n/a Beiträge
 
#56

AW: Tutorial Arbeiten mit Dateien auf binärer Ebene

  Alt 1. Feb 2013, 23:38
So, ich hab zum Spaß einen kleinen Algorithmus für Textkomprimierung geschrieben. Der Algorithmus funktioniert so, dass sich wiederholende Wörter durch Adressen auf das erste Wort ersetzte werden:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  s: string;
  i: Integer;
  sl: TStringList;
begin
  s := 'AUCH EIN KLEINER BEITRAG IST EIN BEITRAG'; //Text der komprimiert wird. Er ist 40 Zeichen lang

  ShowMessage(Format('Text lautet "%s" und ist unkomprimiert %d Bytes lang.', [s, Length(s)]));

  sl := TStringList.Create;
  try
    sl.Delimiter := ' ';

    //--------------------------------------------------------------------------
    ShowMessage('Der Text wird jetzt komprimiert.');

    sl.DelimitedText := s;

    for i := sl.Count - 1 downto 0 do
      if (sl.IndexOf(sl[i]) <> i) and (sl.IndexOf(sl[i]) > -1) then
        sl[i] := '~' + IntToStr(sl.IndexOf(sl[i]));

    s := sl.DelimitedText;
    ShowMessage(Format('Text lautet "%s" und ist komprimiert %d Bytes lang.', [s, Length(s)]));

    //--------------------------------------------------------------------------
    ShowMessage('Der Text wird jetzt wieder dekomprimiert.');

    sl.DelimitedText := s;

    for i := 0 to sl.Count - 1 do
      if (Length(sl[i]) > 1) and (sl[i][1] = '~') then
        sl[i] := sl[StrToInt(Copy(sl[i], 2, MaxInt))];

    s := sl.DelimitedText;
    ShowMessage(Format('Text lautet "%s" und ist unkomprimiert %d Bytes lang.', [s, Length(s)]));

  finally
    sl.Free;
  end;
end;
  Mit Zitat antworten Zitat