Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - String nach sonderzeichen durchsuchen


the-kecks - Mi 04.03.09 17:52
Titel: String nach sonderzeichen durchsuchen
hi,
ich hab ein problem. Ich weiß nicht wie ich aus dem string "name" (edit2.text) alle sonderzeichen rauskriegen soll.
ich könnte natürlich jedes sonderzeichen einzeln mit dem pos befehl suchen und ggf. löschen aber das wäre vieeeeeel zu aufwendig.
habe in der sufu nichts gefunden was meinem problem abhilfe schaffen könnte.
PS: ich kann nicht einfach statt der variable edit2.text nehmen, da ich die variable ständig brauche und es sein könnte dass der benutzer sie ändert/löscht.
hoffe ihr könnt mir helfen.

mfg


Moderiert von user profile iconNarses: Topic aus Sonstiges (Delphi) verschoben am Mi 04.03.2009 um 23:14


Jens Hartmann - Mi 04.03.09 17:55

Hallo,

versuch es mal mit StringReplaced..


Delphi-Quelltext
1:
2:
  MeinString := StringReplace(MeinString, #13#10'', [rfReplaceAll]);
  MeinString := StringReplace(MeinString, #154'Ü', [rfReplaceAll]);



Hiermit würdest du z.B #154 gegen ein großes Ü ersetzten oder #13#10(Zeilenvorschub) entfernen


jaenicke - Mi 04.03.09 18:00

Erstens könntest du alle Sonderzeichen auch gleich bei der Eingabe verhindern, zweitens kannst du einfach alles bis auf Buchstaben z.B. herausfiltern. Ganz schnell und ungetestet hingeschrieben:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
function GetOnlyChars(Value: String): String;
var
  i, CurResult: Integer;
begin
  SetLength(Result, Length(Value));
  CurResult := 1;
  for i := 1 to Length(Value) do
    if Value[i] in ['a'..'z''A'..'Z'then
    begin
      Result[CurResult] := Value[i];
      Inc(CurResult);
    end;
  SetLength(Result, CurResult - 1);
end;
Dann kannst du das einfach aufrufen:

Delphi-Quelltext
1:
EditContents := GetOnlyChars(Edit1.Text);                    


the-kecks - Mi 04.03.09 18:03

hmm vll wäre es am besten die sonderzeichen zu suchen und falls welche gefunden werden einfach showmessage('Dieser Name ist ungültig');
geht des vll auch?

mfg


jaenicke - Mi 04.03.09 18:11

Wie du die einzelnen Buchstaben prüfst siehst du ja in meinem Beispiel. Das ja auch fertig ist, wenn du sie einfach entfernen willst.

Um zu schauen, ob es sich um ein Sonderzeichen handelt, könntest du einfach umgekehrt schauen, ob es kein Buchstabe ist:

Delphi-Quelltext
1:
    if not (Value[i] in ['a'..'z''A'..'Z']) then                    


the-kecks - Mi 04.03.09 18:40

hab das mal so gemacht:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
function Sonderzeichenueberpruefung(Value: String): String;
var
  i, CurResult: Integer;
begin
  SetLength(Result, Length(Value));
  CurResult := 1;
  for i := 1 to Length(Value) do
    if not Value[i] in ['a''b''c''d''e''f''g''h''i''j''k''l''m''n''o''p''q''r''s''t''u''v''w''x''y''z''1''2''3''4''5''6''7''8''9''_''A''B''C''D''E''F''G''H''I''J''K''L''M''N''O''P''Q''R''S''T''U''V''W''X''Y''Z'then
    begin
      showmessage('Dieser Name ist ungültig!');
      exit;
    end;
  SetLength(Result, CurResult - 1);
end;

//...

namenew:=Sonderzeichenueberpruefung(namenew);

der zeigt bei mir immer den fehler "Operator ist auf diesen Operandentyp nicht anwendbar"...mach ich was falsch?

mfg

Moderiert von user profile iconNarses: Code- durch Delphi-Tags ersetzt


Delete - Mi 04.03.09 18:44

Du musst klammern.

Delphi-Quelltext
1:
if not (Value[i] in ['a'..'z''0'..'9''_''A'..'Z','ä','Ä','ö','Ö','ü','Ü','ß']) then                    


the-kecks - Mi 04.03.09 18:48

oh mann natürlich...ich vergess das immer. funzt, danke!

mfg