![]() |
Re: String mit gzip (ent)zippen
Liste der Anhänge anzeigen (Anzahl: 1)
Danke für die Aufklärung! Auch wenn ich ehrlich gesagt nicht alles 100%ig verstanden habe, so sehe ich ein, dass das ganze sehr fehlerträchtig ist. Daher habe ich nun meine Anwendung auf Streams umgestellt und an sich funktioniert alles bestens, nur habe ich jetzt ein neues Problem (ich könnte echt druchdrehen!):
In einem weiteren gzip-komprimierten String-Container wurden zwei XML-Konstrukte unmittelbar hintereinander gehängt. Und zwar in dieser Art: Zitat:
Woran liegt das denn nun schon wieder??? Probier es selbst mal aus, ich hab dir eine entsprechende Datei mal angehängt. |
Re: String mit gzip (ent)zippen
Mit meinen gzio-Routinen funktioniert's. Vielleicht ein Bug in DelphiZLib.123?
Gruß Gammatester |
Re: String mit gzip (ent)zippen
Da hast du recht, über deine gzio-Unit hat das ganze funktioniert. Da ich aber ungern über den Umweg einer Datei arbeiten will, würde ich gerne was anderes dafür verwenden. Deine gzdbuf werde ich nun auch nochmal testen, aber ich muss ehrlich sagen: das Handling der ZLibEx-Units fällt mir persönlich deutlich leichter, da die eben "Delphi-like" sind. Aber ist ja auch kein Wunder, deine Units sollen ja nur ein 1 zu 1 Port der C Routinen (mit gewissen Erweiterungen) sein, wenn ich das richtig verstanden hab.
|
Re: String mit gzip (ent)zippen
So, nun habe ich endlich herausgefunden, warum das mit deiner gzdbuf-Unit bisher nicht funktionierte. Ich habe der Funktion gzb_init als Buffer ein dynamisches Array übergeben, kein statissches wie in deinem Beispiel. Und dynamische Arrays beginnen ja mit dem Index 0 und nicht wie bei dir mit 1.
Was müsste ich ändern, damit das ganze auch mit dynamischen Arrays klappt? Auf jeden Fall bin ich nun wieder einen Schritt weiter. |
Re: String mit gzip (ent)zippen
Zitat:
Delphi-Quellcode:
Gruß Gammatester
procedure TForm1.Button1Click(Sender: TObject);
var ibuf: array of byte; f: file; gz: gzbuf; i: integer; s: string; begin assignfile(f,'vsd.gz'); system.reset(f,1); setlength(ibuf,5000); blockread(f,ibuf[0],1242); gz := gzb_init(pBytef(@ibuf[0]),1242); // dies ist der interessante Teil s := ''; while not gzb_eof(gz) do begin i := gzb_getc(gz); if i<0 then break; if (i>0) and (i<256) then s := s+char(i); end; richedit1.Text := s; end; |
Re: String mit gzip (ent)zippen
:dancer2: Juhu, so funktioniert das ganze! :dancer2:
In deinem Beispielprogramm von letzter Woche sah die Wertüberprüfung von i aber noch so aus:
Delphi-Quellcode:
Ich vermute mal, du wolltest damit nicht druckbare Steuerzeichen überspringen. Das ist in meinem Fall gewünscht und daher würde ich das so belassen.
if (i > 31) and (i < 256) then
Gut, dann hätten wirs ja. Thread darf als gelöst betrachtet werden. Und nochmals danke an alle Beteiligten! :cheers: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:39 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