Dieses tutorial (mein erstes), soll zeigen, wie man die Huffman Funktionen zum Komprimieren und Dekomprimieren verwenden kann. Ich verzeichte auf die Erklärungen zu Huffman, da sie nicht ganz leicht zu erlkären sind.
wir brauchen folgendes:
eine Unit (HuffFuncs.pas), die man sich hier download kann (
www.howtodothings.co...icle.asp?article=313)
eine Unit, die wir uns selbst schreiben (reine vereinfachung)
												| 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 11:
 12:
 13:
 14:
 15:
 16:
 17:
 18:
 19:
 20:
 21:
 22:
 23:
 24:
 25:
 26:
 27:
 28:
 29:
 30:
 31:
 32:
 33:
 
 | unit CompDecomp;
 interface
 
 uses
 SysUtils;
 
 procedure CompressText(const filein, fileout: string);
 procedure DecompressText(const Filein, FileOut: string);
 implementation
 
 uses HuffFuncs;
 
 procedure CompressText(const filein, fileout: string);
 var size1, size2: integer;
 begin
 Initialize;
 SetInputfile(FileIn);
 SetOutputFile(FileOut);
 Compress(size1, size2);
 Finalize;
 end;
 
 procedure DecompressText(const Filein, FileOut: string);
 begin
 Initialize;
 SetOutputFile(FileOut);
 SetInputfile(FileIn);
 Decompress;
 Finalize;
 end;
 
 end.
 | 
		
	  
Auf unserer Mainform brauchen wir ein Memo und 2 Buttons, einen openDialog und einen SaveDialog
Unser Button1 soll den Text im Memo komprimiert speichern
		                     
             Delphi-Quelltext
                        Delphi-Quelltext                    
           	 										| 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 11:
 12:
 13:
 
 | procedure TForm1.Button1Click(Sender: TObject);begin
 if SaveDialog1.Execute then begin
 Memo1.Lines.SaveToFile(SaveDialog1.Filename);
 CompressText(SaveDialog1.Filename, SaveDialog1.Filename+'.comp');
 end;
 DeleteFile(SaveDialog1.Filename);
 RenameFile(SaveDialog1.Filename+'.comp', SaveDialog1.Filename);
 if FileExists(SaveDialog1.Filename+'.comp') then
 DeleteFile(SaveDialog1.Filename);
 
 end;
 | 
		
	  
unser Button2 soll einen komprimierten Text dekomprimieren und in unser Memo schreiben...
		                     
             Delphi-Quelltext
                        Delphi-Quelltext                    
           	 										| 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 11:
 12:
 13:
 
 | procedure TForm1.Button2Click(Sender: TObject);begin
 if OpenDialog1.Execute then begin
 DecompressText(OpenDialog1.Filename, OpenDialog1.Filename+'.decomp');
 DeleteFile(OpenDialog1.Filename);
 RenameFile(OpenDialog1.Filename+'.decomp', OpenDialog1.Filename);
 if FileExists(OpenDialog1.Filename+'.decomp') then
 
 DeleteFile(OpenDialog1.Filename+'.decomp);
 
 Memo1.Lines.LoadFromFile(OpenDialog1.Filename);
 end;
 end;
 | 
		
	  
Zur Erlkärung soll noch soviel gesagt sein:
man muss immer mit 2 Dateien arbeiten (und hinterher eine löschen), weil Huffman etwa so vorgeht:
Es wird eine Datei eingelesen (filein) und nach dem Huffman-Baum-Prinzip komprimiert, oder dekomprmiert. Die Ergebnisse werden in ein zweites File geschrieben (fileout). Da man letztendlich nur auf die ergebnisse scharf ist, wird man filein löschen und fileout behalten. Damit normale dateinamen zustande kommen, müssen nun noch die dateinamen von filein und fileout vertauscht werden, das machen wir über RenameFile. 
Viel Spaß beim Ausprobieren...
(Ein Listing der Huffman-Funktionen gibt es im Tutorial "Huffman Kompression Teil II - allerdings ohne Erklärung!)
Moderiert von  Tino: Code- durch Delphi-Tags ersetzt.
Tino: Code- durch Delphi-Tags ersetzt.