Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi String lässt sich nicht in die Datei schreiben... (https://www.delphipraxis.net/13055-string-laesst-sich-nicht-die-datei-schreiben.html)

Christian Seehase 13. Mär 2004 20:42

Re: String lässt sich nicht in die Datei schreiben...
 
Moin Thunder,

erst einmal herzlich Willkommen hier in der Delphi-PRAXiS.

Das Problem ist, dass StringReplace intern AnsiPos verwendet um die Position des zu ersetzenden Zeichens zu finden.
AnsiPos benutzt AnsiStrPos, eine Funktion für nullterminierte Strings.
Es wird also geprüft, ob der String zu Ende ist, also ein Nullbyte auftaucht, was bei jedem gefundenen Muster, dass mit einer #00 beginnt der Fall ist, und somit können solche Muster nicht gefunden werden.

Die Einzige Abhilfe wäre hier sich das StringReplace selber zu erstellen.

Dani 13. Mär 2004 20:42

Re: String lässt sich nicht in die Datei schreiben...
 
Hi,
Kannst du nicht schon beim Einlesen mit dem Filestream die #0-Zeichen ersetzen? Du könntest die Daten z.B. zuerst in einem Puffer speichern und diesen per for-Schleife durchgehen, bevor der Puffer an den Ergebnis-String angehängt wird...

nur-ein-weiterer-thunder 13. Mär 2004 21:07

Re: String lässt sich nicht in die Datei schreiben...
 
Erstmal Dank euch beiden, so wie es aussieht, werd ich also um eine FOR-Schleife nicht drumherum kommen :?
Bisher hab ich mich nämlich durch
Delphi-Quellcode:
FileStream.Read(ReturnStr[1],filestream.size);
gut davor drücken können :wink:

Naja, mal schaun :)

Christian Seehase 13. Mär 2004 23:12

Re: String lässt sich nicht in die Datei schreiben...
 
Moin Thunder,

Du kannst auch weiterhin so einlesen, am besten dann aber in eine Hilfsvariable.
Das eigentliche Ziel initialisierst Du dann

Delphi-Quellcode:
// Annahme: #00 wird aus dem Ursprung gelöscht
ReturnStr := StringOfChar(#00,FileStream.Size);
und anschliessend überträgst Du in einer Schleife die eingelesenen Daten in ReturnStr.
Hierbei brauchst Du dann noch eine Variable als Index für ReturnStr[..], und lässt immer die #00 weg beim Übertragen.

Zum Schluss noch ein

Delphi-Quellcode:
ReturnStr := trimright(ReturnStr);
und schon hast Du das Gewünschte.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:15 Uhr.
Seite 2 von 2     12   

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