Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Bordmittel gesucht: Bestimmte Zeichen aus String entfernen (https://www.delphipraxis.net/99318-bordmittel-gesucht-bestimmte-zeichen-aus-string-entfernen.html)

Rakshasa 10. Sep 2007 17:02


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:
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;
Der Aufruf erfolgt dann über
Delphi-Quellcode:
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;
Ja, wie gesagt: Gibt es dafür ein Bordmittel?

[edit=SirThornberry]Code-Tags durch Delphi-Tags ersetzt - nächstes mal bitte gleich die Delphi-Tags verwenden - Mfg, SirThornberry[/edit]

leddl 10. Sep 2007 17:21

Re: Bordmittel gesucht: Bestimmte Zeichen aus String entfern
 
:gruebel: Na du hast das "Bordmittel" doch schon gefunden:
Delphi-Quellcode:
aString := StringReplace(aString, Char, '', [rfReplaceAll]);
Mehrere auf einmal geht AFAIK nicht, aber deine Funktion sieht doch ganz gut aus ;)

Rakshasa 10. Sep 2007 17:32

Re: Bordmittel gesucht: Bestimmte Zeichen aus String entfern
 
Zitat:

Zitat von leddl
:gruebel: Na du hast das "Bordmittel" doch schon gefunden:
Delphi-Quellcode:
aString := StringReplace(aString, Char, '', [rfReplaceAll]);
Mehrere auf einmal geht AFAIK nicht, aber deine Funktion sieht doch ganz gut aus ;)


Ä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.

oki 10. Sep 2007 17:39

Re: Bordmittel gesucht: Bestimmte Zeichen aus String entfern
 
Sorry,

aber StringReplace ist so definiert:
Delphi-Quellcode:
function StringReplace(const S, OldPattern, NewPattern: string; Flags: TReplaceFlags): string;
Und da sind komplette Strings und nicht nur Char erlaubt.

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]

leddl 10. Sep 2007 17:41

Re: Bordmittel gesucht: Bestimmte Zeichen aus String entfern
 
Zitat:

Zitat von oki
Und da sind komplette Strings und nicht nur Char erlaubt.

Bringt aber nichts, wenn die Zeichen, die er löschen will nicht direkt hintereinanderstehen :zwinker:

Klaus01 10. Sep 2007 17:43

Re: Bordmittel gesucht: Bestimmte Zeichen aus String entfern
 
Zitat:

Zitat von oki
Sorry,

aber StringReplace ist so definiert:
Delphi-Quellcode:
function StringReplace(const S, OldPattern, NewPattern: string; Flags: TReplaceFlags): string;
Und da sind komplette Strings und nicht nur Char erlaubt.

Gruß oki

Da hast Du recht, aber dann müssen die Zeichen auch beieinander stehen und können nicht einzeln im
String ausgetascht werden.

Da ist die Lösung mit StringReplace und der for Schleife doch ideal.

Grüße Klaus

oki 10. Sep 2007 17:47

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

Klaus01 10. Sep 2007 17:51

Re: Bordmittel gesucht: Bestimmte Zeichen aus String entfern
 
Zitat:

Zitat von oki
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

Ja, da magst Du recht haben.
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

Helmi 10. Sep 2007 17:56

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:
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;
wie du siehst, geh ich jedes Zeichen des Textes durch, schau ob das Zeichen (also Char) in dem Array Chars vorhanden ist.
Falls ja, dann wird dieses Char durch ein Byte des Array Bytes ersetzt.

Du könntest dies etwas umbauen.

xaromz 10. Sep 2007 17:56

Re: Bordmittel gesucht: Bestimmte Zeichen aus String entfern
 
Hallo,

wenn Du mehrere Strings auf einmal ersetzen willst, dann hab ich da was für Dich.

Gruß
xaromz


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:04 Uhr.
Seite 1 von 2  1 2      

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