Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Library: Object-Pascal / Delphi-Language (https://www.delphipraxis.net/35-library-object-pascal-delphi-language/)
-   -   Delphi String komprimieren dekomprimieren (https://www.delphipraxis.net/18249-string-komprimieren-dekomprimieren.html)

SleepyMaster 16. Mär 2004 15:15


String komprimieren dekomprimieren
 
Delphi-Quellcode:
uses
  ZLib;

function CompressString(input:string):string;
var
  InpBuf, OutBuf: Pointer;
  OutBytes: Integer;
begin
  InpBuf := nil;
  OutBuf := nil;
  try
    GetMem(InpBuf, Length(input));
    Move(input[1], InpBuf^, Length(input));
    CompressBuf(InpBuf, Length(input), OutBuf, OutBytes);
    SetLength(result,OutBytes);
    Move(OutBuf^, result[1], OutBytes);
  finally
    if InpBuf <> nil then FreeMem(InpBuf);
    if OutBuf <> nil then FreeMem(OutBuf);
  end;
end;

function DeCompressString(input:string):string;
var
  InpBuf, OutBuf: Pointer;
  OutBytes: Integer;
begin
  InpBuf := nil;
  OutBuf := nil;
  try
    GetMem(InpBuf, Length(input));
    Move(input[1], InpBuf^, Length(input));
    DeCompressBuf(InpBuf, Length(input),0,OutBuf, OutBytes);
    SetLength(result,OutBytes);
    Move(OutBuf^, result[1], OutBytes);
  finally
    if InpBuf <> nil then FreeMem(InpBuf);
    if OutBuf <> nil then FreeMem(OutBuf);
  end;
end;

CenBells 16. Mär 2004 18:39

Frage zu String komprimieren dekomprimieren
 
hallo,

ich habe dazu noch eine frage.
Ich habe nun einen MemoryStream, in dem prinzipiell auch nur text steht.
Ich dachte dann, hmm, schreibe ich den stream in einen string.
Das klappt leider nicht,

hier der code, den ich verwende
Delphi-Quellcode:
        LStream.Position := 0;
        SetLength(LString, LStream.Size);
        LStream.Write(LString, LStream.Size);// hier gibt es den fehler Zugriffsverletzung...

        LCompressed := CompressString(LString);

        LStream.Clear;
Weiß wer, was ich falsch mache und kann mich korrigieren?

Gruß
Ken

SleepyMaster 17. Mär 2004 12:58

Re: String komprimieren dekomprimieren
 
Delphi-Quellcode:
        LStream.Position := 0;
        SetLength(LString, LStream.Size);
        LStream.Write(LString[1], LStream.Size);// hier gibt es den fehler Zugriffsverletzung...

        LCompressed := CompressString(LString);

        LStream.Clear;
Damit söllte es gehen!


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:30 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz