![]() |
Array of Char --> String: Zusätzliches $ wird angehangen
Hi,
ich habe folgenden Source, um einen String mit der LHA5Unit zu dekomprimieren:
Delphi-Quellcode:
War nur ein Test, deshalb ist der Source nicht so schön formatiert, sorry. Das Problem ist folgendes: Am Ende steht in TmContent zwar der dekomprimierte String, allerdings wird ein $ angehangen. Wenn ich mit Copy das letzte Zeichen entferne, wird das $ zwar entfernt, aber auch das letzte Zeichen :wall:
var
instream, outstream: tmemorystream; tmcontent2: array of char; i: integer; begin inStream := TMemoryStream.Create; outStream := TMemoryStream.Create; //try inStream.Write(TmContent[1], length(TmContent)); inStream.Position := 0; LHAExpand(inStream, outStream); outStream.Position := 0; setLength(TmContent2, outStream.Size); outStream.Read(TmContent2[0], outStream.Size); TmContent := String(PChar(TmContent2)); setLength(TmContent2, 0); //finally inStream.Free; outStream.Free; //end; tmcontent := copy(tmcontent, 1, length(tmcontent)); end. Florian |
Re: Array of Char --> String: Zusätzliches $ wird angehan
Was steht den in tmcontent2?
|
Re: Array of Char --> String: Zusätzliches $ wird angehan
Am Ende, bevor ich nach String typecaste?
|
Re: Array of Char --> String: Zusätzliches $ wird angehan
Schau dir das ganze mal mit dem Evaluator durch, wann genau das $ dazukommt.
|
Re: Array of Char --> String: Zusätzliches $ wird angehan
Um das letzte Zeichen zu entfernen, ist es viel schneller, wenn man die Länge dekrementiert:
Delphi-Quellcode:
Soweit ich das weiss, ist es besser, man verwendet StrPas, um einen PChar in einen String zu konvertieren, kann mich aber irren (Delphi ist grad nicht an).
SetLengh (MyString, Length (MyString) - 1);
|
Re: Array of Char --> String: Zusätzliches $ wird angehan
StrPas ist mittlerweile unnötig, weil PChars von Compiler implizit umgewandelt werden.
|
Re: Array of Char --> String: Zusätzliches $ wird angehan
Also bei StrPas bekomme ich den Fehler: inkompatible Typen Array und Char.
Im TmContent2 steht das $ auch schon drinnen. Als letztes Zeichen. Ich versuche es einfach mal daraus zu entfernen, indem ich die Länge decrementiere. |
Re: Array of Char --> String: Zusätzliches $ wird angehan
Komischerweise geht das beides nicht. Sowohl wenn ich vor dem Typecast nach String die Länge vom TmContent2 dekrementiere, also auch, wenn ich nach dem Typecast TmContent dekrementiere, fehlt das $ und aber auch das letzte Zeichen ...
|
Re: Array of Char --> String: Zusätzliches $ wird angehan
Florian,
verwende doch einfach mal ein TStringStream. Dort hinein liest du erstmal den dekomprimierten Stream, und prüfst dann die Eigenschaft 'DataString'... |
Re: Array of Char --> String: Zusätzliches $ wird angehan
Ich würde gerne ohne die Classes Unit auskommen. Meine TMemoryStreams sind selbst definierte Typen, von denen der Fehler allerdings mit 100%er Sicherheit nicht herkommt ...
|
Re: Array of Char --> String: Zusätzliches $ wird angehan
Zitat:
Teste doch aus Spass mal mit Classes.pas, den TMemoryStreams und TStringStreams... wenn's klappt, bastle Dir deine eigene Version. |
Re: Array of Char --> String: Zusätzliches $ wird angehan
Ich wills nonVCL haben daher ... ich teste es mal mit den MemoryStreams aus der Classes Unit.
|
Re: Array of Char --> String: Zusätzliches $ wird angehan
Ok, was haben TxxxStreams mit 'VCL' zu tun? VCL ist die *Visual* Component Library... Streams sind imho nicht visuell... Na ja, mach, es bringt ja auch was.
|
Re: Array of Char --> String: Zusätzliches $ wird angehan
Also die MemoryStreams aus der Classes Unit funktionieren genauso wenig ...
Wegen nonVCL: Man verwendet auch einige Units nicht. Und dazu gehören z.B. SysUtils und Classes, weil diese das Programm wieder verhältnissmäßig riesig machen. Problem ist immer noch offen ... |
Re: Array of Char --> String: Zusätzliches $ wird angehan
Habs :-D
Wenn ich statt String nach PChar Typecaste und dann mit Copy alles bis auf das letzte Zeichen kopiere gehts wunderbar. Danke an alle für ihre Hilfe :thumb: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13: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