Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Bis auf best. alle anderen Zeichen aus String 'rausfiltern (https://www.delphipraxis.net/30882-bis-auf-best-alle-anderen-zeichen-aus-string-rausfiltern.html)

jfheins 30. Sep 2004 16:23


Bis auf best. alle anderen Zeichen aus String 'rausfiltern
 
Ich möchte gerne in einem String Zeichen so filtern, dass nur noch buchstaben darin vorkommen, also alle nicht-Buchstaben entfernen. gibt es da vielleicht eine funktion, die das macht ???

Dax 30. Sep 2004 16:24

Re: Bis auf best. alle anderen Zeichen aus String 'rausfilte
 
Iterier doch durch den String und kopiere die Buchstaben in einen neuen String rein. Eine schnellere Methode kenne ich leider nicht.

jfheins 30. Sep 2004 16:28

Re: Bis auf best. alle anderen Zeichen aus String 'rausfilte
 
Im moment gehe ich jedes zeichen im string durch und füge es ggf. in einen neuen string. (Meintest du das mit Iterieren ?)

Aber es muss doch irgendwie einfacher gehen ?! :?

Dax 30. Sep 2004 16:36

Re: Bis auf best. alle anderen Zeichen aus String 'rausfilte
 
Es geht bestimmt einfacher, aber ich wüsste keinen Weg.

BtW: Du hast den Begriff "Iterieren" komplett richtig erklärt. ;)

Matze 30. Sep 2004 17:13

Re: Bis auf best. alle anderen Zeichen aus String 'rausfilte
 
Du könntest es auch Hier im Forum suchenStringReplace (Delphi-Referenz durchsuchenStringReplace) versuchen. Man muss diese Procedure aber für jedes zeichen einzeln aufrufen, was kompliziert wird, wenn nicht nur Zahlen, sondern auch die Sonderzeichen wie "[, ], }, =, ..." vorkommen...

Dax 30. Sep 2004 17:14

Re: Bis auf best. alle anderen Zeichen aus String 'rausfilte
 
Aber wenn du StringReplace nutzt um die unerwünschten Zeichen zu löschen, ist es langsamer als meine Methode.

Duffy 30. Sep 2004 17:46

Re: Bis auf best. alle anderen Zeichen aus String 'rausfilte
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo jfheins,
ich denke, diese Funktion erfüllt auch deine Wünsche ...
Delphi-Quellcode:
function DeleteUnknownChars(Str: string): string;
var
  I: Integer;
begin
  for I := Length(Str) downto 1 do
  begin
    if not(Str[I] in ['a'..'z', 'A'..'Z']) then
      Delete(Str, I, 1);
  end;
  Result := Str;
end;
bye
Claus

Dax 30. Sep 2004 17:48

Re: Bis auf best. alle anderen Zeichen aus String 'rausfilte
 
Ich glaube aber immer noch, das die Kopiermethode schneller ist, weil man bei dem löschen einzelner Zeichen ja den Rest vom String eins zurückgeschoben wird, und das braucht Zeit.

Duffy 30. Sep 2004 17:51

Re: Bis auf best. alle anderen Zeichen aus String 'rausfilte
 
Hallo Dax,
das mag wohl so sein, aber ich denke, daß es sich erst bei ein paar ... Strings bemerkbar macht.

bye
Claus

Jens Schumann 30. Sep 2004 17:58

Re: Bis auf best. alle anderen Zeichen aus String 'rausfilte
 
Hallo,
folgende Funktion hat Hagen mal im Entwickler Forum gepostet.
Die Funktion ist die schnellste die ich kenne
Delphi-Quellcode:
    function DeleteNonNumbers(const Value: String): String;
    var
      I: Integer;
      P: PChar;
    begin
      SetLength(Result, Length(Value));
      P := PChar(Result);
      for I := 1 to Length(value) do
        if Value[I] in ['0'..'9'] then
        begin
          P^ := Value[I];
          Inc(P);
        end;
      SetLength(Result, P - PChar(Result));
    end;
Hier wird nur Delphi MemoryManager nur zweimal belästigt. Bei den o.g. Funktionen bei jedem Schleifendurchlauf.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:52 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