Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi CompressString ohne #0 (https://www.delphipraxis.net/102074-compressstring-ohne-0-a.html)

peschai 23. Okt 2007 06:48


CompressString ohne #0
 
Hallo,
suche einfache möglichkeit eine Zeichenkette zu komprimieren und wieder zu dekomprimieren.
Das komprimierte sollte auch ein String sein. Das hat bestimmte Gründe, warum ich hier nciht mit Binärdaten arbeiten möchte, sondern mit Strings.

Nun fürchte ich aber, daß im komprimierten output auch eine #0 darin sein kann, was eventuell beim folgenden "stringhandling" zu problemen führen könnte...

"ZCompressionString" scheint zu machen was ich benötige, aber ich bin mir hier mit der #0 nicht sicher. Bei speicherung als "langer" string wird auch die länge extra gespeichert, so daß das pure string handling funktionieren dürfte...

Aber was, wenn ich den String in eien Datei schreibe oder von Windows anzeigen lassen möchte (#0 n->ende für windows pchar) oder ...
Am liebsten wäre mir ein compression output als String, der niemals eine #0 im String enthalten würde ...

Wer kann mir hier helfen ?

marabu 23. Okt 2007 06:59

Re: CompressString ohne #0
 
Guten Morgen,

die Wahl des "richtigen" Kompressionsalgorithmus hängt von den Eingabedaten ab. Welche Eigenschaften hat der Eingabestring? Soll ein Standardverfahren verwendet werden? Muss das Verfahren streamfähig sein? Muss die Kompressionsrate maximal sein?

Grüße vom marabu

alzaimar 23. Okt 2007 07:07

Re: CompressString ohne #0
 
Du könntest den String nach der Kompression auf '#0' prüfen und diese escapen. Also z.B. so:
1. Alle Zeichen außer #255 bleiben.
2. #255 wird zu #255#255
3. #0 wird zu #255#254

Beim Einlesen kopierst Du alles außer #255. Wenn das Zeichen = #255, prüfst Du das nächste Zeichen. Ist das = #254, schreibst Du #0 in den Outut, ist es = #255 dann schreibst Du #255.

OregonGhost 23. Okt 2007 09:30

Re: CompressString ohne #0
 
Zitat:

Aber was, wenn ich den String in eien Datei schreibe oder von Windows anzeigen lassen möchte (#0 n->ende für windows pchar) oder ...
Sollte dein Problem eher in diesem Feld liegen: Eine #0 kann man sowieso nicht anzeigen. Für die Anzeige könnte man also alle #0 durch z.B. #32 ersetzen. In Dateien umgekehrt wäre eine #0 normalerweise kein Problem (außer man beharrt darauf, sie als PChar einzulesen, aber warum sollte man).


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:58 Uhr.

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