Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Stringproblem - Nur Ziffern sollen drin bleiben


Moellers - Do 20.11.03 14:09
Titel: Stringproblem - Nur Ziffern sollen drin bleiben
Hi zusammen,

ich habe ein Problem mit einem String der aus der Datenbank kommt. In diesem sind die Telefonnummern eingetragen.
Diese haben leider kein einheitliches Format sondern teilweise mit Leerzeichen, Klammern, Bindestrich usw....

Jetzt suche ich eine Möglichkeit den String so zu verändern das er nachher nur noch Zahlen drin hat.

Bsp:
aus

(0203) 4354 - 4334

soll nach der Bearbeitung

020343544334

werden.

Kann mir vielleicht jemand einen Tipp geben wie man sowas regeln kann?

Gruss
Andreas


MAlsleben - Do 20.11.03 14:59

Hi,

es gibt da eine uralte Pascal- Procedure, die auch noch in Delphi existiert.
procedure Val(S; var V; var Code: Integer);

Die Variable Code gibt bei der Umwandlung, von str nach int die Fehler- position an, wo keine Konvertierung durchgeführt werden konnte. Dann einfach an dieser Stelle das Zeichen entfernen. Das ganze in eine Schleife gepackt. Fertig. Val ist auch in der Delphi- Hilfe erklärt.

Gruß Micha.


Moellers - Do 20.11.03 16:37

Danke Dir für den Tipp.

Habs hinbekommen


TRomano - Fr 21.11.03 12:38

Ein wenig universeller geht es mit folgender function:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
...
const setDigits : set of char = ['0'..'9'];
        setChars  : set of char = ['a'..'z','A'..'Z'];
...
implementation

{$R *.dfm}

function OnlyChars(const s: string; const setOnlyChars : TSetOfChars = []) : string;
var i, nLength : integer;
begin
  Result  := '';
  nLength := Length(s);
  if (setChars = []) or (nLength = 0)
     then begin
            Result := s;
            Exit;
          end
     else for i:=1 to nLength do if (s[i] in setOnlyChars) then Result := Result + s[i];
end;


Allerdings besteht hier noch ein wenig Optimierungspotential ...

Gruss

Tom