Anmelden

View Full Version : Feldinhalt prüfen auf Nummerisch



Seiten : 1 [2] 3 4

Mr.iSeries
25-05-11, 08:00
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

ja genau so seh ich das auch. Finde da die TESTN funktion einfacher. Habe TESTN mal mit Feldinhalt 'ROM' getestet. Liegt ja im Bereich von J-R und wird lt. Handbuch als negativer Wert angesehen. Laut meines Tests sieht er aber diese Buchstaben auch als Zeichen an und die Bezugszahl wird nicht auf *on gesetzt.

Fuerchau
25-05-11, 08:17
Bei TESTN wird das Vorzeichen nur auf der letzten Stelle angenommen.
Zeichen vor der letzten Stelle müssen natürlich numerisch sein, wobei Leerzeichen auch noch gesondert behandelt werden.

Teste mal mit "12M" statt "ROM".

Es geht aber auch noch so:

if %len(%trim(%xlate('1234567890':' ':MyTest))) > *zero;
// Nicht numerisch
endif;

Mr.iSeries
25-05-11, 08:20
[quote=Fuerchau;75268]

Teste mal mit "12M" statt "ROM".

OK hast mich überzeugt :)

B.Hauser
25-05-11, 08:40
Es geht aber auch noch so:

if %len(%trim(%xlate('1234567890':' ':MyTest))) > *zero;
// Nicht numerisch
endif;

Würde aber auch bei dem String '1 23 45 67' *Zeros zurückbringen und damit könnte auch eine der Funktionen %DEC, %DECH, %INT oder %INTH verwendet werden, die konvertieren einen solchen String problemlos in 1234567.

Birgitta

Fuerchau
25-05-11, 09:03
Wie wärs dann mit:

if %len(%trim(%xlate(' 1234567890':'X ':MyTest))) > *zero;

Lucky662
11-07-24, 15:47
Also, ich habe das Problem, dass mir
len = %check('0045958':'0123456789');
eine 2 zurück liefert!
Ich arbeite beim Kunden mit 7.1.
Kann mir das jemand erklären?
Ich weiß hier gibt es einen Stau! Aber die Updates auf 7.3 und dann folglich 7.5 werden grade besprochen, dauert aber noch.

Lucky662
11-07-24, 16:04
Soll das 0 liefern wenn das Feld MyTest nur nummerische werte beinhaltet? Oder soll es die Läge von MyTest wiedergeben?
len = %len(%trim(%xlate('0123456789':'X':'0045958')));
Liefert bei mir 7!
len = %len(%trim(%xlate('0123456789':' ':'0045958')));
Liefert bei mir 5!
??????

Fuerchau
11-07-24, 16:18
Wie immer eine Darstellungssache dieses Forums:



%len(%trim(%xlate('0123456789':' ':'0045958')));


Die Anzahl der Zeichen von/nach muss identisch sein, also 10 Leerzeichen statt einem.
Aber wie Birgitta schon schrieb:

%dec(Var:n:m) kommt mit Leer- und Vorzeichen zurecht.
Bei nicht numerisch gibts eine Exception, folglich:



monitor;
mydec = %dec(...);
on-error *all;
// nicht numerisch
endmon;


Das Ganze kann man sich auch in eine Funktion packen.

Pikachu
11-07-24, 18:35
Bei IBM sind hier %CHECK und %XLATE und weitere (https://www.ibm.com/docs/en/i/7.5?topic=operations-string) beschrieben.

Lucky662
11-07-24, 19:11
Danke,
wie weit ich damit gehen kann weiß ich noch nicht. Der Kunde arbeitet noch mit I- und O-Karten, auch beim Display! Aber ich werde das mal so einbauen. Auf partielles FreeRPG bin ich ja schon gegangen.