![]() |
Bordmittel gesucht: Bestimmte Zeichen aus String entfernen
Hallo,
ich frage mich gerade, ob Delphi von "Haus aus" eine function hat, mit der bestimmte Zeichen aus einem String entfernt werden können? Optional auch im Aufruf mehrere Zeichen, nicht nur eines? Ich behelfe mich zur Zeit mit einer eigenen function, vielleicht wird dann auch mein Anliegen klarer:
Delphi-Quellcode:
Der Aufruf erfolgt dann über
Function RemoveChars(const sSource: String; DeleteChars: Array of Char): String;
var i: integer; begin Result := sSource; for i := Low(DeleteChars) to High(DeleteChars) do Result := StringReplace(Result, DeleteChars[i], '', [rfReplaceAll]); end;
Delphi-Quellcode:
Ja, wie gesagt: Gibt es dafür ein Bordmittel?
var
s: String; begin s := 'DIES ist ein TestString. Tab-Zeichen: '#9; s := RemoveChars(s, ['D', #9]); // Entfernt das "D" und das Tab-Zeichen (#9) aus dem String end; [edit=SirThornberry]Code-Tags durch Delphi-Tags ersetzt - nächstes mal bitte gleich die Delphi-Tags verwenden - Mfg, SirThornberry[/edit] |
Re: Bordmittel gesucht: Bestimmte Zeichen aus String entfern
:gruebel: Na du hast das "Bordmittel" doch schon gefunden:
Delphi-Quellcode:
Mehrere auf einmal geht AFAIK nicht, aber deine Funktion sieht doch ganz gut aus ;)
aString := StringReplace(aString, Char, '', [rfReplaceAll]);
|
Re: Bordmittel gesucht: Bestimmte Zeichen aus String entfern
Zitat:
Äh ja, es ging mir tatsächlich hauptsächlich darum, mehrere Zeichen auf einmal zu ersetzen bzw. zu löschen :) Darum ja der Umweg über meine eigene function. |
Re: Bordmittel gesucht: Bestimmte Zeichen aus String entfern
Sorry,
aber StringReplace ist so definiert:
Delphi-Quellcode:
Und da sind komplette Strings und nicht nur Char erlaubt.
function StringReplace(const S, OldPattern, NewPattern: string; Flags: TReplaceFlags): string;
Gruß oki [Edit] Ähm, sorry hab mich von Char verleiten lassen und nicht gesehen, dass du mehrere Einzelstrings auf einen Ruck ersetzen willst. :oops: [/edit oki] |
Re: Bordmittel gesucht: Bestimmte Zeichen aus String entfern
Zitat:
|
Re: Bordmittel gesucht: Bestimmte Zeichen aus String entfern
Zitat:
String ausgetascht werden. Da ist die Lösung mit StringReplace und der for Schleife doch ideal. Grüße Klaus |
Re: Bordmittel gesucht: Bestimmte Zeichen aus String entfern
Hallo Klaus01,
hab zwischenzeitlich meinen Beitrag editiert, da mir im Nachgang mein Irtum aufgefallen ist. Imho ist jetzt aber die Frage, ob es in Bezug auf die Laufzeit nicht günstiger ist den Text "händisch" durchzuarbeiten und gleich auf das Vorkommen aller Teilstrings zu prüfen. Mehrfacher aufruf von StringReplace wird ja n*Textlänge Durchläufe verursachen. Gruß oki |
Re: Bordmittel gesucht: Bestimmte Zeichen aus String entfern
Zitat:
Es kommt dann darauf an wieviel Zeichen denn ausgetascht werden sollen und wie lang der String ist. Ein Array muß zwangsläufig mehrmals durchlaufen werden. Grüße Klaus |
Re: Bordmittel gesucht: Bestimmte Zeichen aus String entfern
Hallo,
ich hatte mal ein ähnliches Problem. Ich musste Chars durch Hex-Zahlen ersetzen. Damals hätt ich für 10 Chars, 10x StringReplace aufrufen müssen. Dies war mir aber zu aufwendig und zu langsam. Ich hab mir dann folgende Logik überlegt und dies zu vereinfachen und zu verschnellern:
Delphi-Quellcode:
wie du siehst, geh ich jedes Zeichen des Textes durch, schau ob das Zeichen (also Char) in dem Array Chars vorhanden ist.
function TMainForm.LCD_Text_senden(Text: String);
const Chars: array[1..10] of Char = ('ä', 'ö', 'ü', 'Ä', 'Ö', 'Ü', 'ß', '²', '³', 'µ'); Bytes: array[1..10] of Byte = ($84, $94, $81, $8E, $99, $9A, $E1, $FD, $FE, $E6); var i : Integer; Pos_char: Integer; begin for i := 1 to length(Text) do begin //prüfen ob Char im Array "Chars" ist Pos_Char := Pos(Text[i], Chars); //Sonderzeichen vorhanden? - dann durch Byte-Wert ersetzen If Pos_Char > 0 then Text[i] := Chr(Bytes[Pos_Char]); end; end; Falls ja, dann wird dieses Char durch ein Byte des Array Bytes ersetzt. Du könntest dies etwas umbauen. |
Re: Bordmittel gesucht: Bestimmte Zeichen aus String entfern
Hallo,
wenn Du mehrere Strings auf einmal ersetzen willst, dann ![]() Gruß xaromz |
Re: Bordmittel gesucht: Bestimmte Zeichen aus String entfern
Hallo,
ich hatte nur einfaches Bordwerkzeug dabei:
Delphi-Quellcode:
Gruß Hawkeye
function RemoveChars (const aSource: string;
const aChars: TSysCharSet): string; var i, Count : Integer; begin SetLength (Result, Length(aSource)); Count := 0; for i := 1 to Length(aSource) do if not (aSource[i] in aChars) then begin Inc (Count); Result[Count] := aSource[i]; end; SetLength (Result, Count); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:31 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-2025 by Thomas Breitkreuz