Anmelden

View Full Version : Feldinhalt prüfen auf Nummerisch



Seiten : [1] 2 3 4

CaddyMajor
23-01-08, 08:15
Guten Morgen zusammen,

eine kleine Frage:

Vorhanden ist ein 20stelliges Alpha-Feld.

Nun möchte ich prüfen ob die ersten 3 Stellen Zahlen sind.

%subst(feld:1:3) ist klar.

Gibts nun nen einfachen Befehl der das dann auf den Inhalt prüft?

Vielen Dank

Fuerchau
23-01-08, 08:17
%check() oder TESTN.
Es gibt bestimmt noch mehr Möglichkeiten.

CaddyMajor
23-01-08, 08:33
Vielen Dank.

Funktioniert.

hwalk
23-01-08, 16:49
xNum = *On;
Monitor;
xhZahl = %Int(%subst(feld:1:3));
On-Error 150; // Dezimaldatenfehler
xNum = *Off;
EndMon;

B.Hauser
23-01-08, 18:38
Hallo,

TESTN ist mit Vorsicht genießen, da J-R negative Zahlen darstellen und deshalb als gültig angesehen werden.

Auch die Built-in-Funktionen %DEC, %DECH, %INT, %INTH, %UNS, %UNSH können zu unerwarteten Ergebnissen führen, da z.B. '1 2' ebenso wie '1,5' konvertiert werden und nicht zu einem Fehler führen.

Die beste Möglichkeit ist tatsächlich mit %CHECK auf nicht numerische Zeichen zu prüfen.

Birgitta

Mr.iSeries
25-05-11, 06:25
stehe gerade vor dem gleichen Problem. Möchte für die TESTN einen freeformatbefehl bzw. built-in-Funktion nutzen. Wenn ich wissen will ob alle Zeichen im Feld numerisch sind geht das doch nicht mit %check oder? Hier wird doch z.B. bei 'TEST1' auch ein Wert größer 0 zurückgegeben da die letzte Stelle ja eine Zahl enthält. Oder seh ich das falsch?

Khholm
25-05-11, 06:43
Du mußt den Test anders rum aufbauen. Definiere eine Variable,z.B. meine_zeichen, die alle Zeichen außer den Ziffern 0 bis 9 und ein eventuelles Dezimalzeichenk (Komma) enthält und dann:

%check(meine_Zeichen:zu_pruefen)

so sollte es klappen

kh

Mr.iSeries
25-05-11, 07:16
Du mußt den Test anders rum aufbauen. Definiere eine Variable,z.B. meine_zeichen, die alle Zeichen außer den Ziffern 0 bis 9 und ein eventuelles Dezimalzeichenk (Komma) enthält und dann:

%check(meine_Zeichen:zu_pruefen)

so sollte es klappen

kh

ok das klingt logisch, jedoch alle Zeichen anzugeben die es gibt da wird der Befehl auch ziemlich lang und das ist auch bisschen umständlich find ich. gibt ja auch ne Menge Sonderzeichen.

Khholm
25-05-11, 07:22
alle zeichen so definieren:

D meine_zeichen C CONST('abcdefghijklmnopqrst-
D uvwxyzâäàáãåçñéêëèíî-
D ïìôöòóõûüùúæ{}¦')

und dann entsprechend den %check.

dann definierst du die Zeichenkette einmal (am besten als Copy-strecke)

kh

B.Hauser
25-05-11, 07:43
Habt Ihr Euch eigentlich mal die Definition von %CHECK angeschaut?

... aus der RPG Reference:
%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.

Sofern mich mein Englisch nicht ganz im Stich lässt, bedeutet dies, dass die Position des ersten abweichenden Zeichens zurückgegeben wird, bzw. wenn der String nur aus gültigen Zeichen besteht wird 0 zurückgegeben.

Birgitta