PDA

View Full Version : Sonderzeichen abfragen



marcel331
13-02-07, 13:42
Hallo,

ich muss in manchen Textfeldern alle Sonderzeichen abfragen, es sind nur Groß- und Kleinschreibung erlaubt.
Gibt es dort eine Möglichekeit dies Abzufragen? Vielleicht direkt im Displayfile? Hab dort bisher nur die Value Werte gefunden!

Danke für eure Hilfe

Gruß

Marcel

Fuerchau
13-02-07, 13:44
Im DSPF gehts mit der Tastaturumschaltung. Da kann man so ein wenig einschränken.

Ansonsten gehts im Programm mit CHECK.

marcel331
14-02-07, 16:00
Hallo,

danke für die Antwort. Habe es mal mit CHECK ausprobiert, es funktioniert auch aber ich noch ein kleines Problem. Unzwar erfasse ich momentan in einer Konstanten das Alphabet also die gültigen Zeichen. Ich würde aber lieber die ungültigen Zeichen erfassen und auf diese dann prüfen aber leider funktioniert dies nicht wirklich mit der CHECK funktion. Gibt es dort eine andere Möglichkeit?

Danke für eure Antworten

Marcel

Fuerchau
14-02-07, 16:07
Man kann leider nur auf "Gültig" und nicht auf "nicht Gültig" prüfen.

marcel331
14-02-07, 20:16
hm hatte ich mir leider gedacht. Haben Sie denn zufällig eine andere Idee. Mir fällt sonst nur ein Array ein, welches ich durchlaufe und dann mit der SCAN funktion das Feld durchsuche. Die Lösung gefällt mir nur nicht so gut, bin ein Freund von wenig Code :).

Gruß

Marcel

B.Hauser
15-02-07, 08:24
Das ist doch kein Problem!
Die Sonderzeichen in dem String werden alle entweder mit dem OPCode XLATE oder mit der Built-in-Funktion %XLATE auf ein nicht zulässiges Sonderzeichen konvertiert. Dann wird entweder mit dem OPCode SCAN oder der Built-In-Funktion %SCAN geprüft, ob dieses Zeichen im String vorkommt.
... und fertig. Maximal 5 Code Zeilen



D Text S 256A Varying

D Ungueltig S 4A inz('!;.?')
D Ersetzen S 4A inz('****')
*----------------------------------------------
/Free
Text = %XLate(Ungueltig: Ersetzen: Text);
If %Scan('*': Text) > *Zeros;
//Ungültige Zeichen
Else;
//Nur gültige Zeichen
EndIf;
/End-Free


Birgitta

Fuerchau
15-02-07, 08:54
Naja, weniger Code ist das auch nicht.
Aber im Free-Format kann man auch noch abkürzen:

If %Scan('*': %XLate(Ungueltig: Ersetzen: Text) ) > *Zeros;
:
endif;

marcel331
15-02-07, 09:03
Hallo,

Danke für eure Antworten, werde es jetzt gleich direkt mal einbauen. Die Funktion XLATE war mit bisher noch nicht bekannt.

Mit wenig Code meinte ich eigentlich das Array, hier kann ich ja wieder mit einer Konstanten arbeiten.

Gruß

Marcel

Fuerchau
15-02-07, 09:22
Welches Array ?

Auch beim Check kann ich mit einer Konstanten und einem Befehl arbeiten:


%CHECK (Check Characters)

%CHECK(comparator : base {: start})

%CHECK returns the first position of the string base that contains a character that
does not appear in string comparator. If all of the characters in base also appear in

comparator, the function returns 0.
The check begins at the starting position and continues to the right until a
character that is not contained in the comparator string is found. The starting
position defaults to 1.
The first parameter must be of type character, graphic, or UCS-2, fixed or varying
length. The second parameter must be the same type as the first parameter. The
third parameter, if specified, must be a non-float numeric with zero decimal
positions.

Also:
D Gueltig 36A inz('ABCD.....)

if %check(Gueltig:Text) > 0;
=> Fehler
endif;

marcel331
15-02-07, 09:34
das ist mir bewusst, hab ich ja auch gemacht. Aber ich wollte ja die ungültigen Zeichen erfassen und nicht die gültigen. Deshalb fiehl ja die Funktion CHECK raus.

Gruß

Marcel