![]() |
AW: Windows, Stream und String hin her convert fehler
Zitat:
![]() Wichtig ist es schon. Ohne Debuggen ist es so wie Autos reparieren ohne die Motorhaube zu öffnen. |
AW: Windows, Stream und String hin her convert fehler
Breakpunkt setzen, mit Mauszeuger 0ber Variablec fahren und Wert ablesen. Oder mit F7 in Einzelschritten durchgehen. Was ist daran so schwer?
|
AW: Windows, Stream und String hin her convert fehler
Ich habe mir dazu mal einen Streamhelper geschrieben, funktioniert bislang problemlos...
Delphi-Quellcode:
[...}
type TStreamHelper = class helper for TStream public procedure ReadString(var Target : string); procedure WriteString (const s: string); end; [...] procedure TStreamHelper.ReadString(var Target: String); var len : Integer; begin ReadBuffer(len, SizeOf(len)); SetLength(Target, len); if (len > 0) then ReadBuffer(Target[1], len * SizeOf(Char)); end; procedure TStreamHelper.WriteString (const s: string); var len : Integer; begin len := Length(s); WriteBuffer(len, SizeOf(len)); if (len > 0) then WriteBuffer(s[1], len * SizeOf(Char)); end; |
AW: Windows, Stream und String hin her convert fehler
Zitat:
Delphi-Quellcode:
Ggf. muß noch an die abschließenden CRLF gedacht werden also
langByte=length(instring)*sizeof(char);
Delphi-Quellcode:
langByte=length(instring)*sizeof(char)+sizeof(linebreak);
Gruß K-H |
AW: Windows, Stream und String hin her convert fehler
Wenn es um Text, Stream und Encoding geht dann liest man doch immer wieder Sachen die stark nach Schlangenöl riechen.
Nochmals zur Info: ![]() ![]()
Delphi-Quellcode:
bzw.
TTextWriter
Delphi-Quellcode:
abgeleitet)
TTextReader
Man gibt den Stream und das gewünschte Encoding an und kann Schreiben bis der Stream aus allen Nähten platzt. Das Lesen geht analog (Stream, Encoding) und Lesen bis der Arzt kommt. Zitat:
|
AW: Windows, Stream und String hin her convert fehler
war da nicht vor nicht so langer Zeit jemand, der mit
Delphi-Quellcode:
gelesen hat, und sich dann gewundert hat, das nach dem zurückschreiben (nicht mit
readln
Delphi-Quellcode:
) der Text etwas unleserlich war?
writeln
Gruß K-H |
AW: Windows, Stream und String hin her convert fehler - (für mich gelöst, Danke!)
Danke für den Hinweis mit SizeOf(Char) !
Das funktioniert bei mir genau so wie ich es mir gewünscht habe ohne das ich auf etwas anderes umsteigen musste. Tschuldigung, encoding, CRLF usw ist bei mir nicht so tragend/entscheidend. String vom Edit sollte rein, Stream mit dem sollte raus und rückwärtsrum genauso. Nach anpassung (Danke nochmal an Michael), klappts bei mir prima!
Delphi-Quellcode:
function TKlasse.StringToStream ( const InputString: String; var ResultStream: TMemoryStream ): Boolean;
var i: Integer; begin // falls was schiefgeht, erstmal falsen Result := False; // wenn nix reinkommt, muss auch nix rauskommen if (Length(InputString) <= 0) then Exit; // falls stream inexistent ist, einen erstellen, ansonsten auf null position stellen if (ResultStream = NIL) then ResultStream := TMemoryStream.Create else ResultStream.Position := 0; // vor dem try den zähler auf null setzen damit compiler keine warnung wirft i := 0; try // stream beschreiben i := ResultStream.Write(InputString[1], Length(InputString) * SizeOf(Char)); finally // entweder haben wir es geschafft, oder auch nicht :-) if (i = Length(InputString) * SizeOf(Char)) then Result := not False else Result := False end; end; function TKlasse.StreamToString ( const InputStream: TMemoryStream; var ResultString: String ): Boolean; begin // falls was schiefgeht, erstmal falsen Result := False; // wenn stream inexistent oder leer ist, mach nichts if ((InputStream <> NIL) and (InputStream.Size > 0)) then begin try // stream position auf null setzen InputStream.Position := 0; // stringlänge anpassen SetLength(ResultString, InputStream.Size div SizeOf(Char)); // stream inhalt in string schreiben InputStream.Read(ResultString[1], InputStream.Size); finally // entweder haben wir es geschafft, oder auch nicht :-) if (Length(ResultString) = InputStream.Size div SizeOf(Char)) then Result := not False else Result := False end; end; end; procedure TKlasse.btnKnopfClick(Sender: TObject); var tmp: TMemoryStream; s: String; begin Memo.Lines.Add('Converting "' + Edit.Text + '" to stream'); try if (StringToStream( Edit.Text, tmp )) then if (StreamToString( tmp, s )) then Memo.Lines.Add(s); finally s := ''; tmp.Free; end; end; |
AW: Windows, Stream und String hin her convert fehler - (für mich gelöst, Danke!)
Zitat:
Und das mit dieser gesonderten Betrachtung von CRLF (so wie hier in diesem Thread beschreiben) ist eher ein Indiz von "Ich habe überhaupt gar nichts verstanden" und man sollte den Worten eher keine Beachtung schenken. Wenn es dich irgendwann dann doch treffen sollte, dann frag einfach nochmal nach, wie man es denn wirklich machen sollte (zudem der Code auch noch kürzer wird). |
AW: Windows, Stream und String hin her convert fehler
Das
Delphi-Quellcode:
verursacht Flimmern vor meinen Augen!
if ... then
Result := not False else Result := False |
AW: Windows, Stream und String hin her convert fehler
Zitat:
Aber auch dieser Code verrät so einiges ... und es drängt sich die Frage auf, warum daraus nicht einfach ein
Delphi-Quellcode:
gemacht wird.
Result := ...;
Wahrscheinlich viel zu kurz und viel zu wenig verschwurbelt. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:19 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 by Thomas Breitkreuz