PDA

View Full Version : Verhindern das weniger als 8 Stellen in einer Displayfile eingegeben werden



Seiten : [1] 2

Dominic K.
28-12-17, 18:30
Hallo :),

ich möchte verhindern das in einem Programm wo spez. Geräte gepflegt werden, die Gerátenummer unvollständig hinterlegt wird.

Es geht um eine 8 stellige Nummer, welche händisch eingepflegt werden muss, sobald diese aber nicht 8 Stellen hat, läuft ein batch Programm auf MSGW.

Ich hatte zuerst an %len gedacht, aber das gibt mir anscheinend nur die Länge der deklarierten Variable zurück, aber nicht die Länge des Inhaltes.
Mein zweiter Gedanke war einfach die Zahl in ein char zu casten und dann mittels %scan zu schauen ob ein blank auftaucht.

Das kommt mir aber so plump vor, gibt es nichts elegantes um dies zu lösen? Meine Kollegen konnten mir da nicht weiterhelfen.

Grüße
Dominic

DKSPROFI
28-12-17, 21:16
Moin,

quick and dirty:

if 8 stellige zahl < 10000000
fehler.
else
mach was
endif

mfg

DKSPROFI

DKSPROFI
29-12-17, 05:38
Moin,

Du kannst aber auch so lösen, für den Fall das Dein Feld Alpha ist.

For $i = 1 To %Len(%Trim(DeinFeld)) ;
If %Subst ( DeinFeld : $i : 1 ) = DeinZeichen' ;
Fehler ;
EndIf ;
EndFor ;

mfg

DKSPROFI

ExAzubi
29-12-17, 06:51
Wenn es noch Spaltengebunden sein darf/soll ist TESTN ein guter befehl:


IF %LEN(%TRIM(FELD))<>8
*FEHLER
ELSE
TESTN FELD 979899
*IN97 = *ON // Ist rein nummerich
*IN98 = *ON //Nummerisch und Blanks
*IN99 = *ON // Ist Blanks
Alle *OFF = Ungültige Nummerische Werte
ENDIF

Pikachu
29-12-17, 08:08
Wie ist das Feld in der Bildschirmdatei definiert? Bei welcher Zahl läuft es auf MSGW?

hel400
29-12-17, 09:05
..
Ich hatte zuerst an %len gedacht, aber das gibt mir anscheinend nur die Länge der deklarierten Variable zurück, aber nicht die Länge des Inhaltes.
...


Die EINGEGEBENEN Zeichen mit "%LEN" ermitteln geht so:
ANZAHL =%LEN(%TRIM(Feldname))

Aber nur bei Alpha.
Wenn numerisch, dann hat DKSPROFI in seiner ersten Antwort ja schon beantwortet
(if... < 10000000)

Fuerchau
29-12-17, 09:26
Egal ob Numerisch oder Alpha:
%len(%trim(%char(Feld)))
Bei Zeichenfeldern gibts keine Wandlung, bei numerischen Feldern gibts Edit ohne Vornull.
Aber eine typgerechte Prüfung ist dem immer vorzuziehen.

Pikachu
29-12-17, 09:51
D DS
DNUMMER 8S 0 INZ(12345678)
DSTELLE1 1A OVERLAY(NUMMER)
D
C STELLE1 IFNE '0'
C ENDIF

Dominic K.
29-12-17, 10:56
Ah ok :)

Mit Trim wird also der tatsächliche Inhalt gezählt. Hatte das anders verstanden.
Hätte ich vllt. erst einmal praktisch testen sollen >.<

Danke für die Hilfe und allen einen guten Rutsch ins neue Jahr!

Pikachu
29-12-17, 11:05
Mit %TRIM (https://www.ibm.com/support/knowledgecenter/en/ssw_ibm_i_73/rzasd/bbtrim.htm#bbtrim) werden die Enden gestutzt.