![]() |
Delphi-Version: XE7
Wie entferne ich Steuerzeichen aus einem String?
Hallo, mein Name ist Günther und ich programmiere nun seit etwas über zwei Jahren in Delphi. Heute stehe ich vor einem schwierigen Problem. Ich möchte bestimmte Character (wie
Delphi-Quellcode:
) aus einem String entfernen.
#0
Ich dachte, ich mache es so:
Delphi-Quellcode:
Aber leider funktioniert das nicht, da kommt so eine komische Fehlermeldung. Könnt ihr mir helfen? Ist bestimmt voll einfach, aber ich bin noch neu :oops:
uses System.SysUtils;
procedure justReplaceThings(); const STX = #02; ETX = #03; NUL = #00; myStr = 'X'+STX+'Hallo '+NUL+'Welt'+ETX; var cleanedStr: String; begin cleanedStr := myStr.Replace(NUL, EmptyStr); Assert( cleanedStr <> myStr ); end; |
AW: Wie entferne ich Steuerzeichen aus einem String?
Komisch?
Man mag es nicht glauben, aber Strg+C funktioniert auch in Delphi-Dialogen. (und dann Strg+V als Text ins Forum) Du meinst aber nicht zufällig sowas, wie Folgendes? :stupid: Zitat:
Die Frage könnte aber auch lauten: "Wie kommen denn böse Steuerzeichen in den String rein"? |
AW: Wie entferne ich Steuerzeichen aus einem String?
Zitat:
LOL ;) gruss |
AW: Wie entferne ich Steuerzeichen aus einem String?
Wie da hineinkommen weiß ich auch nicht, der entsprechende Programmierer ist schon nach Hause gegangen. Kann ich bei dem Wetter auch verstehen.
Die eigentliche Frage Warum werden die Zeichen nicht entfernt? bleibt aber bestehen. Steppe ich durch den entsprechenden RTL-Code verlässt mich spätestens bei
Delphi-Quellcode:
die Lust...
if (Str1[I] <> #0) and (StrLComp(PWideChar(PByte(Str1) + I * SizeOf(WideChar)), Str2, Len2) = 0) then
begin Result := PWideChar(PByte(Str1) + I * SizeOf(WideChar)); |
AW: Wie entferne ich Steuerzeichen aus einem String?
Sag das doch gleich. :zwinker:
Irgendwer ist vor Jahren auf die wirkich saublöde Idee gekommen und verwendet in StringReplace das ![]() ![]() ![]() Jetzt rate mal, was der Unterschied zwischen einem Delphi-String mit Längenangabe und einem Windows-PChar mit Endezeichen ist und was dann passiert, wenn ein gewisses böses Steuerzeichen im String vor kommt. :angle: Der Bug wurde schon vor sehr vielen Jahren gemeldet ... ich würde nicht mehr mit einem Bugfix rechnen. |
AW: Wie entferne ich Steuerzeichen aus einem String?
Das heißt mit allem außer #0 sollte es funktionieren?
|
AW: Wie entferne ich Steuerzeichen aus einem String?
Würde ich mal so annehmen. Auch absolute Neulinge können es übrigens ausprobieren. Aber dazu müssten sie Programmieren können. :lol:
|
AW: Wie entferne ich Steuerzeichen aus einem String?
Delphi-Quellcode:
ergibt
uses System.SysUtils;
procedure justReplacingThings(); const formatStr = 'Hallo%sWelt'; var dirtyString: String; cleanedString: String; badCharacter: Char; charsTested: Integer; begin charsTested := 0; for badCharacter := Low(Char) to High(Char) do begin dirtyString := String.Format(formatStr, [badCharacter]); cleanedString := dirtyString.Replace(badCharacter, EmptyStr); if not (dirtyString <> cleanedString) then WriteLn('Removing Character #', Ord(badCharacter), ' failed'); Inc(charsTested); end; WriteLn(charsTested, ' Characters tested'); end;
Code:
Dann kann ich ja wieder ruhig schlafen.
Removing Character #0 failed
65536 Characters tested |
AW: Wie entferne ich Steuerzeichen aus einem String?
Na zum Glück haben wir die Tage ja eine performante Funktion gebastelt, die beliebige Zeichen aus einem String entfernen kann:
![]() |
AW: Wie entferne ich Steuerzeichen aus einem String?
Zitat:
Könnte ja sein, das irgend ein Zeichen per 'Format' nicht übernommen wird. Dann meckert dein Code auch nicht.
Delphi-Quellcode:
Und dann 'ContainsChar' ohne API implementieren (d.h. kein POS o.ä.).
procedure justReplacingThings();
const formatStr = 'Hallo%sWelt'; var dirtyString: String; cleanedString: String; badCharacter: Char; charsTested: Integer; begin charsTested := 0; for badCharacter := Low(Char) to High(Char) do begin dirtyString := String.Format(formatStr, [badCharacter]); if not ContainsChar(dirtyString, badCharacter) then // <----- writeln('Format fails for #', ord(basCharacter)) else begin cleanedString := dirtyString.Replace(badCharacter, EmptyStr); if not (dirtyString <> cleanedString) then WriteLn('Removing Character #', Ord(badCharacter), ' failed'); end; Inc(charsTested); end; WriteLn(charsTested, ' Characters tested'); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:59 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