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;