AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Bordmittel gesucht: Bestimmte Zeichen aus String entfernen
Thema durchsuchen
Ansicht
Themen-Optionen

Bordmittel gesucht: Bestimmte Zeichen aus String entfernen

Ein Thema von Rakshasa · begonnen am 10. Sep 2007 · letzter Beitrag vom 10. Sep 2007
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Rakshasa
Rakshasa

Registriert seit: 1. Nov 2003
182 Beiträge
 
Delphi 2007 Professional
 
#1

Bordmittel gesucht: Bestimmte Zeichen aus String entfernen

  Alt 10. Sep 2007, 18:02
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]
  Mit Zitat antworten Zitat
Benutzerbild von leddl
leddl

Registriert seit: 13. Okt 2003
Ort: Künzelsau
1.613 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Bordmittel gesucht: Bestimmte Zeichen aus String entfern

  Alt 10. Sep 2007, 18:21
Na du hast das "Bordmittel" doch schon gefunden:
aString := StringReplace(aString, Char, '', [rfReplaceAll]); Mehrere auf einmal geht AFAIK nicht, aber deine Funktion sieht doch ganz gut aus
Axel Sefranek
A programmer started to cuss, cause getting to sleep was a fuss.
As he lay there in bed, looping round in his head
was: while(!asleep()) ++sheep;
  Mit Zitat antworten Zitat
Benutzerbild von Rakshasa
Rakshasa

Registriert seit: 1. Nov 2003
182 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Bordmittel gesucht: Bestimmte Zeichen aus String entfern

  Alt 10. Sep 2007, 18:32
Zitat von leddl:
Na du hast das "Bordmittel" doch schon gefunden:
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.
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#4

Re: Bordmittel gesucht: Bestimmte Zeichen aus String entfern

  Alt 10. Sep 2007, 18:39
Sorry,

aber StringReplace ist so definiert:
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. [/edit oki]
42
  Mit Zitat antworten Zitat
Benutzerbild von leddl
leddl

Registriert seit: 13. Okt 2003
Ort: Künzelsau
1.613 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Bordmittel gesucht: Bestimmte Zeichen aus String entfern

  Alt 10. Sep 2007, 18:41
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
Axel Sefranek
A programmer started to cuss, cause getting to sleep was a fuss.
As he lay there in bed, looping round in his head
was: while(!asleep()) ++sheep;
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.768 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: Bordmittel gesucht: Bestimmte Zeichen aus String entfern

  Alt 10. Sep 2007, 18:43
Zitat von oki:
Sorry,

aber StringReplace ist so definiert:
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
Klaus
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#7

Re: Bordmittel gesucht: Bestimmte Zeichen aus String entfern

  Alt 10. Sep 2007, 18:47
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
42
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.768 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: Bordmittel gesucht: Bestimmte Zeichen aus String entfern

  Alt 10. Sep 2007, 18:51
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
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.323 Beiträge
 
Delphi XE2 Professional
 
#9

Re: Bordmittel gesucht: Bestimmte Zeichen aus String entfern

  Alt 10. Sep 2007, 18:56
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.
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#10

Re: Bordmittel gesucht: Bestimmte Zeichen aus String entfern

  Alt 10. Sep 2007, 18:56
Hallo,

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

Gruß
xaromz
I am a leaf on the wind - watch how I soar
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:07 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz