[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte
  1. #1
    Registriert seit
    Sep 2016
    Beiträge
    45

    Verhindern das weniger als 8 Stellen in einer Displayfile eingegeben werden

    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

  2. #2
    Registriert seit
    Nov 2004
    Beiträge
    325
    Moin,

    quick and dirty:

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

    mfg

    DKSPROFI

  3. #3
    Registriert seit
    Nov 2004
    Beiträge
    325
    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

  4. #4
    Registriert seit
    Apr 2005
    Beiträge
    385
    Wenn es noch Spaltengebunden sein darf/soll ist TESTN ein guter befehl:
    Code:
    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

  5. #5
    Registriert seit
    Nov 2003
    Beiträge
    2.304
    Wie ist das Feld in der Bildschirmdatei definiert? Bei welcher Zahl läuft es auf MSGW?

  6. #6
    Registriert seit
    Dec 2014
    Beiträge
    310
    Zitat Zitat von Dominic K. Beitrag anzeigen
    ..
    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)

  7. #7
    Registriert seit
    Feb 2001
    Beiträge
    20.206
    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.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  8. #8
    Registriert seit
    Nov 2003
    Beiträge
    2.304
    PHP-Code:
    D                 DS
    DNUMMER                          8S 0 INZ
    (12345678)
    DSTELLE1                         1A   OVERLAY(NUMMER)
    D
    C     STELLE1       IFNE      
    '0'
    C                   ENDIF 

  9. #9
    Registriert seit
    Sep 2016
    Beiträge
    45
    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!

  10. #10
    Registriert seit
    Nov 2003
    Beiträge
    2.304
    Mit %TRIM werden die Enden gestutzt.

  11. #11
    Registriert seit
    Feb 2001
    Beiträge
    20.206
    Zu unterscheiden sind die Funktionen
    %trim(): Blanks am Anfang und Ende entfernen
    %triml(): Blanks am Anfang
    %trimr(): Blanks am Ende
    Das Ergebnis ist ein Varying-Feld, dessen Länge mit %len() abgefragt werden kann.

    Übrigens %checkr() liefert die 1. Position eines ungültigen Zeichens aus einer Liste.
    %checkr(' ':Feld) liefert also die Position des letzten Zeichens vor Blank und somit ebenso die Länge des Inhalts ohne Leerzeichen.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  12. #12
    Registriert seit
    Sep 2016
    Beiträge
    45
    @Pikachu : Das weis ich :-) dachte nur nicht das dies mit %len koppelbar ist und dann der tatsächliche inhalt zurückgegeben wird. Habe die Beispiele in der Reference zu %len nicht korrekt gelesen.

Similar Threads

  1. Langsam wird es weniger...
    By ExAzubi in forum IBM i Hauptforum
    Antworten: 6
    Letzter Beitrag: 16-12-17, 13:28
  2. Joblog verhindern
    By dibe in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 10-08-16, 15:21
  3. Textfeld mit 1300 Stellen in mehrere Felder a 60 Stellen in RPG oder SQL
    By Stephan70 in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 21-12-15, 08:12
  4. Antworten: 3
    Letzter Beitrag: 11-02-15, 17:13
  5. Tabulatorsteuerung in Displayfile
    By Daechsle in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 05-06-14, 15:29

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •