Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi StreamToString (https://www.delphipraxis.net/73064-streamtostring.html)

arbu man 11. Jul 2006 22:20


StreamToString
 
Ich steh grade ziehlich auf den Schlauch. Ich will einen Stream in einen String umwandeln. Doch folgende funktion gibt ein eigenartiges ergebnis aus. Was mache ich da falsch und welche ausgabe hat der Code bei euch ?
Delphi-Quellcode:
function streamtostr(S: TStream): string;
var
  str: string;
begin
  setlength(str, S.size);
  S.Read(str[1],length(str));
  result:= str;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  ms: tmemorystream;
  s: string;
begin
  ms:= tmemorystream.Create;
  s := 'gsfdgfdghgfd';
  ms.Write(s, length(s));
  showmessage(streamtostr(ms));
end;
Was steht in der ShowMessage ???

SirThornberry 11. Jul 2006 22:22

Re: StreamToString
 
du musst die Streamposition wieder an den Anfang setzen bevor du daraus liest.

arbu man 11. Jul 2006 22:25

Re: StreamToString
 
So also ?
Delphi-Quellcode:
function streamtostr(S: TStream): string;
var
  str: string;
begin
  setlength(str, S.size);
  S.Position:=0;
  S.Read(str[1],length(str));
  result:= str;
end;
Jetzt erhalte zwar keinen dll namen aber aber auch noch nicht den text

Zacherl 11. Jul 2006 22:27

Re: StreamToString
 
Erzeuge doch einen TStringStram, lade mit CopyFrom den QuellStream in den StringStream. Danach kannst du den String aus dem StringStream auslesen.

Florian

SirThornberry 11. Jul 2006 22:27

Re: StreamToString
 
das liegt daran das du beim schreiben den Fehler gemacht hast den du beim lesen glücklicher Weise nicht gemacht hast. Mit
Delphi-Quellcode:
ms.Write(s, length(s));
schreibst du nicht den String sondern die Adresse wo der String hinzeigt + die Variablen dahinter. Wenn dann so:
Delphi-Quellcode:
ms.Write(s[1], length(s));
war aber sicher nen Pflüchtigkeitsfehler.

arbu man 11. Jul 2006 22:29

Re: StreamToString
 
Danke, meine güte bei stream mach ich wirklich alles falsch was auch nur geht :(

Muetze1 11. Jul 2006 22:29

Re: StreamToString
 
Ausserdem schreibt er die Adresse des Strings und alles nachfolgende im RAM in den Stream anstatt dem String selber. Ausserdem gibt es doch den TStringStream.

Delphi-Quellcode:
function streamtostr(S: TStream): string;
var
  str: string;
  lStringStream: TStringStream;
begin
  lStringStream := TStringStream.Create;
  Try
    lStringStream.CopyFrom(S, 0);
    Result := lStringStream.DataString;
  Finally
    lStringStream.Free;
  End;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  ms: tmemorystream;
  s: string;
begin
  ms:= tmemorystream.Create;
  try
    s := 'gsfdgfdghgfd';
    ms.Write(s[1], length(s));
    ms.Position := 0;
    showmessage(streamtostr(ms));
  finally
    ms.Free;
  end;
end;

// Alternativ:
procedure TForm1.Button2Click(Sender: TObject);
var
  ms: tstream;
  s: string;
begin
  ms := tstringstream.Create('gsfdgfdghgfd');
  try
    ms.Position := 0;
    showmessage(streamtostr(ms));
  finally
    ms.Free;
  end;
end;
/EDIT: rote Box???

taktaky 24. Okt 2007 13:20

Re: StreamToString
 
Zitat:

Zitat von Muetze1
...//
Delphi-Quellcode:
function streamtostr(S: TStream): string;
var
  str: string;
  lStringStream: TStringStream;
begin
  lStringStream := TStringStream.Create;
  Try
...
/EDIT: rote Box???

Du hast einen Fehler gemacht !
soll vielleicht so :
Delphi-Quellcode:
lStringStream := TStringStream.Create('');

mkinzler 24. Okt 2007 13:42

Re: StreamToString
 
Aber eigentlich ist doch egal, wie alt der Thread ist.

taktaky 24. Okt 2007 13:43

Re: StreamToString
 
Zitat:

Zitat von cruiser
Sogar ÜBER ein Jahr... 1 1/4 sogar :wall:

:drunken:

zu alt, Und? Was falsch ist muss weg und updatet
Es gibt viele Leute, die in Archiv suchen :mrgreen:


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:18 Uhr.
Seite 1 von 2  1 2      

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