Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Stream to String / String to Stream ? möglich wie? (https://www.delphipraxis.net/4502-stream-string-string-stream-moeglich-wie.html)

Schlingel 2. Mai 2003 09:56


Stream to String / String to Stream ? möglich wie?
 
Hallo

Problemstellung:

Bisher:

Write : Rich.Edit.Text --> Stringvariable --> File
Read : File --> Stringvariable --> Rich.Edit.Text

Nun wollte ich die RxRichEdit - Komponente einsetzen um auch kleine Graphiken
im RichEdit-Fenster mittels Drag&Drop einzufügen bzw. anzuzeigen.

Leider ist bis hierher kein Problem, aber... jetzt stellt sich ein Problem daß ich
damit ich Rückwärts-Kompatibel bleibe, den Inhalt des RxRichText-Fensters auch weiterhin
auf die bisherige Stringvariable abbilden müsste.

Ich dachte mit .LoadToStream / SaveToStream müsste dies möglich sein. ?

Auch trotz Intensiv-Studium verschiedenster Foren und der Delhi-Hilfe bin ich nicht in der
Lage Stream --> String --> Stream zu lösen.

hat jemand einen Tipp dazu?

Danke im Vorraus

Christian Seehase 2. Mai 2003 12:03

Moin Schlingel,

eine Variable von Typ String in einen Stream zu schreiben, bzw. daraus zu lesen geht so:

Delphi-Quellcode:
var
  sBuffer : string;
  fsIN   : TFileStream;
  fsOUT  : TFileStream;

begin
  fsIN := TFileStream.Create('Pfad der zu lesenden Datei',fmOpenRead);
  fsOUT := TFileStream.Create('Pfad der zu schreibenden Datei',fmOpenWrite or fmCreate);
  try
    // Platz reservieren
    sBuffer := StringOfChar(#00,fsIN.Size);
    fsIN.Read(sBuffer[1],length(sBuffer));
    fsOUT.Write(sBuffer[1],length(sBuffer));
  finally
    FreeAndNil(fsIN);
    FreeAndNil(fsOUT);
  end;
end;
Da der Buffer nicht typisiert ist, ist die Angabe von [1] wichtig. Dies ist die Stelle ab der der String geschrieben wird, bzw. an der in den String eingelesen wird.
Man kann auch andere Werte angeben, um z.B. nur bestimmte Teile zu schreiben, bzw. an bestimmte Stellen einzulesen.

Schlingel 2. Mai 2003 12:32

Stream-Problem ..
 
Hallo Chris

damke für deine message... leider lösst deine Variante nicht ganz mein Problem.

Ich würde eine Stream to String / String to Stream Lösung benötigen, die ohne Umweg über ein File zu bewerkstelligen wäre.

mfg

Schlingel

Neo2084 2. Mai 2003 13:46

Re: Stream-Problem ..
 
Hallo Schlingel,

Zitat:

Zitat von Schlingel
Ich würde eine Stream to String / String to Stream Lösung benötigen, die ohne Umweg über ein File zu bewerkstelligen wäre.

dan nimm doch einfach tMemoryStream statt tFileStream,
das von Chris beschriebene funktioniert damit genau so.

Gruß Jan

Christian Seehase 2. Mai 2003 14:54

Moin Zusammen,

oder anders gesagt:
Welchen Stream man benutzt ist egal.

Einen Tip hab' ich aber noch zur Eigenschaft Text von RichEdit usw.

Der direkte Zugriff darauf ist sehr langsam. Man kommt erheblich besser weg, wenn man den String, den man TEXT zuweisen will in einen MemoryStream schreibt, und dann aus diesem mittels LoadFromStream liest.
Beispiel:
ca. 3,8MB grosse Textdatei
- Zuweisung an Text: Manuell abgebrochen nach 4 Minuten.
- Umweg über Stream: In ca. 3 Sekunden geladen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:59 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