Avatar billede mysitesolution Nybegynder
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.
Avatar billede martinlind Nybegynder
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
Avatar billede mysitesolution Nybegynder
18. februar 2003 - 17:45 #2
Nu har jeg kun den downloadede personal version....
Avatar billede mysitesolution Nybegynder
18. februar 2003 - 17:47 #3
Jeg kan godt skrive zlib i uses, men hvordan bruger jeg det? et kode ex.
Avatar billede siz23 Nybegynder
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
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester