![]() |
#0 durch "nichts" ersetzen
Hallo,
ich habe folgenden Code:
Delphi-Quellcode:
Dort ersetz ich #0 durch #32 (Leerzeichen)
//FileStream und StringStream erzeugen
FileStream := TFileStream.Create(Datei, fmOpenRead); StringStream := TStringStream.Create(S); try //FileStream in StringStream kopieren FileStream.Position := 0; StringStream.CopyFrom(FileStream, FileStream.Size); //String aus StringStream auslesen S := StringStream.DataString; //#0 durch #32 ersetzen for i := 1 to length(S) do begin If S[i] = #0 then S[i] := #32; end; //Text in StringList laden SL_NCUpgrade.Text := S; Wie kann ich aber das #0 durch nichs ersetzen? - also komplett löschen? Muss ich da wirklich mittels delete arbeiten? |
AW: #0 durch "nichts" ersetzen
Oder StringReplace()
|
AW: #0 durch "nichts" ersetzen
Nicht getestet:
Delphi-Quellcode:
i := 0;
SetLength(sTmp, Length(s)); for c in s do begin if (c <> #0) then begin s[i] := c; inc(i); end; end; SetLength(sTmp, pred(i)); |
AW: #0 durch "nichts" ersetzen
|
AW: #0 durch "nichts" ersetzen
Zitat:
|
AW: #0 durch "nichts" ersetzen
Zitat:
Zitat:
werd ich mal ausprobieren (wobei for ... in ... do in Delphi 7 noch nicht vorhanden ist) |
AW: #0 durch "nichts" ersetzen
Delphi-Quellcode:
str := StringReplace( str, #0, '', [rfReplaceAll] );
|
AW: #0 durch "nichts" ersetzen
StringReplace nutzt intern blöder Weise einen PChar-Pos, welches bei 0 endet und ignoriert die Längenangabe des Strings.
Also For+Delete oder das Schnellere von Win32.API oder eine PChar-Variante, welche auf die Längenangabe und nicht auf ein #0 hört. |
AW: #0 durch "nichts" ersetzen
Kleine Änderung (allerdings auch ungetestet):
Delphi-Quellcode:
i := 0;
SetLength(sTmp, Length(s)); for c in s do begin if (c <> #0) then begin //erst erhöhen, sonst Zugriff auf String[0] inc(i); s[i] := c; end; end; //jetzt müsste i der exakten Länge entsprechen SetLength(sTmp, i); |
AW: #0 durch "nichts" ersetzen
Danke für eure Antworten!
Habs jetzt endgültig so gemacht:
Delphi-Quellcode:
//String aus StringStream auslesen
S_Data := StringStream.DataString; //String auf die Länge des Datenstrings setzen SetLength(S, length(S_Data)); //#0 ausfiltern und in neuen String schreiben for i := 1 to length(S_Data) do begin If S_Data[i] <> #0 then begin inc(j); S[j] := S_Data[i]; end; end; //wirkliche Größe des Strings setzen SetLength(S, j); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:51 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