View Full Version : Sonderzeichen abfragen
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
Im DSPF gehts mit der Tastaturumschaltung. Da kann man so ein wenig einschränken.
Ansonsten gehts im Programm mit CHECK.
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
Man kann leider nur auf "Gültig" und nicht auf "nicht Gültig" prüfen.
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
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
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;
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
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;
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