18. februar 2003 - 16:20
Der er
3 kommentarer og 1 løsning
Komprimering af tekst
Er der nogen der har en kode, eller ved et sted hvor der er en kode der kan komprimere tekst, altså zippe teksten. Et ex. på teksten er: 245,154,264|12,52,0|546,45,1.... osv.
Annonceindlæg fra Thales
18. februar 2003 - 16:25
#1
i extras bib. på din delphi cd ligger Zlib som er en slags zip med interface rutiner lige til at bruge i delphi, du kan pakke / udpakke stream's og buffere brug evt. en StringStream og pak den
20. februar 2003 - 12:20
#4
her er lidt jeg fandt på nettet. Uses ZLib; { Compress a stream } procedure CompressStream(inpStream, outStream: TStream); var InpBuf,OutBuf: Pointer; InpBytes,OutBytes: integer; begin InpBuf := nil; OutBuf := nil; try GetMem(InpBuf,inpStream.size); inpStream.Position := 0; InpBytes := inpStream.Read(InpBuf^,inpStream.size); CompressBuf(InpBuf,InpBytes,OutBuf,OutBytes); outStream.Write(OutBuf^,OutBytes); finally if InpBuf <> nil then FreeMem(InpBuf); if OutBuf <> nil then FreeMem(OutBuf); end; end; { Decompress a stream } procedure DecompressStream(inpStream, outStream: TStream); var InpBuf,OutBuf: Pointer; OutBytes,sz: integer; begin InpBuf := nil; OutBuf := nil; sz := inpStream.size-inpStream.Position; if sz > 0 then try GetMem(InpBuf,sz); inpStream.Read(InpBuf^,sz); DecompressBuf(InpBuf,sz,0,OutBuf,OutBytes); outStream.Write(OutBuf^,OutBytes); finally if InpBuf <> nil then FreeMem(InpBuf); if OutBuf <> nil then FreeMem(OutBuf); end; outStream.Position := 0; end; { Example: Compress the contents of RichEdit1 and calculate the compression rate. Then save the stream to a file (ms2.dat) Beispiel: Komprimiert den Inhalt von RichEdit1 und berechnet die Kompressionsrate. Dann wird der Stream in eine Datei (ms2.dat) gespeichert. } procedure TForm1.Button1Click(Sender: TObject); var ms1, ms2 : TMemoryStream; begin ms1 := TMemoryStream.Create; try ms2 := TMemoryStream.Create; try RichEdit1.Lines.SaveToStream(ms1); CompressStream(ms1,ms2); ShowMessage(Format('Stream Compression Rate: %d %%', [round(100 / ms1.Size * ms2.Size)])); ms2.SaveToFile('C:\ms2.dat'); finally ms1.Free; end; finally ms2.Free; end; end; { Loads the stream from a file (ms2.dat) and decompresses it. Then loads the Stream to RichEdit1. Ladt den komprimierten Stream von einer Datei (ms2.dat) und dekomprimiert ihn. Dann wird der Stream wieder in RichEdit1 geladen. } procedure TForm1.Button2Click(Sender: TObject); var ms1, ms2 : TMemoryStream; begin ms1 := TMemoryStream.Create; try ms2 := TMemoryStream.Create; try ms1.LoadFromFile('C:\ms2.dat'); DecompressStream(ms1,ms2); RichEdit1.Lines.LoadFromStream(ms2); finally ms1.Free; end; finally ms2.Free; end; end; Good Luck