Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Array of Char --> String: Zusätzliches $ wird angehangen ... (https://www.delphipraxis.net/83390-array-char-string-zusaetzliches-%24-wird-angehangen.html)

Zacherl 1. Jan 2007 20:29


Array of Char --> String: Zusätzliches $ wird angehangen
 
Hi,

ich habe folgenden Source, um einen String mit der LHA5Unit zu dekomprimieren:
Delphi-Quellcode:
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.
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:

Florian

mkinzler 1. Jan 2007 20:31

Re: Array of Char --> String: Zusätzliches $ wird angehan
 
Was steht den in tmcontent2?

Zacherl 1. Jan 2007 20:54

Re: Array of Char --> String: Zusätzliches $ wird angehan
 
Am Ende, bevor ich nach String typecaste?

3_of_8 1. Jan 2007 20:56

Re: Array of Char --> String: Zusätzliches $ wird angehan
 
Schau dir das ganze mal mit dem Evaluator durch, wann genau das $ dazukommt.

alzaimar 1. Jan 2007 20:57

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:
SetLengh (MyString, Length (MyString) - 1);
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).

3_of_8 1. Jan 2007 20:59

Re: Array of Char --> String: Zusätzliches $ wird angehan
 
StrPas ist mittlerweile unnötig, weil PChars von Compiler implizit umgewandelt werden.

Zacherl 1. Jan 2007 21:02

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.

Zacherl 1. Jan 2007 21:05

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 ...

alzaimar 1. Jan 2007 21:25

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'...

Zacherl 1. Jan 2007 21:30

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 ...

alzaimar 1. Jan 2007 21:59

Re: Array of Char --> String: Zusätzliches $ wird angehan
 
Zitat:

Zitat von Florian Bernd
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 ...

:wall: Tja, man kann sich das Leben auch schwer machen (und Programme langsamer).

Teste doch aus Spass mal mit Classes.pas, den TMemoryStreams und TStringStreams... wenn's klappt, bastle Dir deine eigene Version.

Zacherl 1. Jan 2007 22:00

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.

alzaimar 1. Jan 2007 22:07

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.

Zacherl 1. Jan 2007 22:26

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 ...

Zacherl 1. Jan 2007 22:36

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 06:06 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