-
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?
-
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
-
 Zitat von Khholm
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.
-
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
-
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
-
 Zitat von B.Hauser
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.
-
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;
-
[quote=Fuerchau;75268]
Teste mal mit "12M" statt "ROM".
OK hast mich überzeugt
-
 Zitat von Fuerchau
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
-
Wie wärs dann mit:
if %len(%trim(%xlate(' 1234567890':'X ':MyTest))) > *zero;
-
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!
??????
-
Wie immer eine Darstellungssache dieses Forums:
Code:
%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:
Code:
monitor;
mydec = %dec(...);
on-error *all;
// nicht numerisch
endmon;
Das Ganze kann man sich auch in eine Funktion packen.
Similar Threads
-
By marmart in forum IBM i Hauptforum
Antworten: 5
Letzter Beitrag: 25-09-07, 16:29
-
By pwrdwnsys in forum IBM i Hauptforum
Antworten: 2
Letzter Beitrag: 07-11-06, 16:34
-
By TARASIK in forum IBM i Hauptforum
Antworten: 1
Letzter Beitrag: 26-10-06, 12:07
-
By zannaleer in forum NEWSboard Drucker
Antworten: 6
Letzter Beitrag: 13-09-06, 11:35
-
By Sulla in forum NEWSboard Programmierung
Antworten: 4
Letzter Beitrag: 29-12-05, 11:41
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks