[Gelöst] Prüfen ob Zeichen Buchstaben sind

22. Juni 2007 14:46

Huhu,
ich habe einen Sring und will die ersten 3 Zeichen Prüfen, ob das Buchstaben sind.
Wie mache ich das am geschicktesten?

Meine erste Idee war, wenn ein evaluate für jedes Zeichen einzelnd in eine Int-Variable fehlschlägt.
Aber dann würden Sonderzeichen und Buchstaben gleichbehandelt werden. Das finde ich zu unsauber.....
Hat einer von Euch noch eine Idee?
Zuletzt geändert von Holzer am 22. Juni 2007 16:07, insgesamt 1-mal geändert.

22. Juni 2007 15:10

Hi!

Eventuell so:

Code:
Text:='ABC123';
IF (Text[1]>='A') AND (Text[1]<='Z') AND
   (Text[2]>='A') AND (Text[2]<='Z') AND
   (Text[3]>='A') AND (Text[3]<='Z') THEN
     MESSAGE('Die ersten drei Zeichen sind Buchstaben!');

Gruß, Marc

22. Juni 2007 15:13

Cool, ich wußte gar nicht, dass ich die ><-Operatoren mit Stings verwenden kann!

Danke Marc, Das Forum ist der Hit :-D

22. Juni 2007 15:13

Hallo,

mit einem Automation Server könntest Du auch einen regulären Ausdruck realisieren. Das wäre zumindest der in anderen Programmiersprachen übliche Weg...

Gruß,
Jens

22. Juni 2007 15:21

Ich würde Marcs Code noch ein UPPERCASE hinzufügen ...

Ich war mir eigentlich ziemlich sicher, dass es in C/AL einen Befehl gibt zur Umwandlung eines Buchstaben in den ASCII-Wert und umgekehrt. Dies hätte uns auch geholfen. Aber wahrscheinlich hat mich doch nur meine Delphivergangenheit eingeholt.

22. Juni 2007 16:06

Hi Natalie,
uppercase ist eine gute Idee.
Ansonsten läuft es mit marc seinem Vorschlag wunderbar.
Danke schön und ein schönes Wochenende
PS: So sieht es bei mir aus:
Code:
// check if the first signs are letters
FOR i:=1 TO 3 DO BEGIN
  TextVar:=UPPERCASE(COPYSTR("Order No.",i,1));
  IF NOT ((TextVar >= 'A') AND (TextVar <= 'Z')) THEN
    Letter:=FALSE;
END;

22. Juni 2007 16:42

Hallo,
was ist mit Umlauten (äüöß) ?
Zählen die nicht auch zu den Buchsteben?

22. Juni 2007 16:49

Guter Einwand, die müssten noch extra abgefragt werden. Und wenn ich der ASCII-Tabelle trauen kann, liegen unsere Umlaute leider nicht direkt hintereinander und müssten daher einzeln abgefragt werden.

Ist nun auch kein Ding der Unmöglichkeit...

22. Juni 2007 16:52

oh stimmt,
daran habe ich nicht gedacht.
Zum Glück wird mein Kunde sicher keine Ordernummer mit diesen Buchstaben verwenden.
Aber ich bau das schnell noch mit ein.
Danke schön :-)

22. Juni 2007 17:15

Holzer hat geschrieben:[...]Zum Glück wird mein Kunde sicher keine Ordernummer mit diesen Buchstaben verwenden.

Beim Kunden ist alles möglich. :-)

Gruß, Marc

22. Juni 2007 18:36

Natalie hat geschrieben:Ich war mir eigentlich ziemlich sicher, dass es in C/AL einen Befehl gibt zur Umwandlung eines Buchstaben in den ASCII-Wert und umgekehrt.


Den ASCII-Wert kann man direkt abgreifen
Code:
MyText := 'ABC';
MyAscii := MyText[1]; // MyAscii ( Integer)  = 65
MyAscii := MyText[2]; // MyAscii  = 66
MyAscii := MyText[3]; // MyAscii  = 67

22. Juni 2007 18:56

Einen hab ich auch anzubieten :idea: :

Code:
    PROCEDURE HasOnlyLetters@1000000001(CheckText@1000000000 : Text[30];LengthToTest@1000000001 : Integer) : Boolean;
    BEGIN
      CheckText := UPPERCASE(COPYSTR(CheckText, 1, LengthToTest));
      EXIT(DELCHR(CheckText, '=', 'ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÜß') = '');
    END;

22. Juni 2007 19:47

SilverX hat geschrieben:Einen hab ich auch anzubieten :idea: :
[...]

Wohl die eleganteste Lösung.

Gruß, Marc

25. Juni 2007 10:16

Hallo,
stimmt den Code von SilverX find ich auch am schönsten.
Danke für Eure Hilfe und eine sonnige Woche! 8-)