[NEWSboard IBMi Forum]
Seite 1 von 3 1 2 ... Letzte
  1. #1
    Registriert seit
    Jun 2004
    Beiträge
    89

    Feldinhalt prüfen auf Nummerisch

    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

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.370
    %check() oder TESTN.
    Es gibt bestimmt noch mehr Möglichkeiten.
    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

  3. #3
    Registriert seit
    Jun 2004
    Beiträge
    89
    Vielen Dank.

    Funktioniert.

  4. #4
    Registriert seit
    Jan 2008
    Beiträge
    43
    Code:
    xNum = *On;
    Monitor;
      xhZahl = %Int(%subst(feld:1:3));
      On-Error 150;  // Dezimaldatenfehler
        xNum = *Off;
    EndMon;

  5. #5
    Registriert seit
    Aug 2001
    Beiträge
    2.893
    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
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 5. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  6. #6
    Registriert seit
    Jan 2007
    Beiträge
    122
    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?

  7. #7
    Registriert seit
    Feb 2008
    Beiträge
    104
    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

  8. #8
    Registriert seit
    Jan 2007
    Beiträge
    122
    Zitat Zitat von Khholm Beitrag anzeigen
    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.

  9. #9
    Registriert seit
    Feb 2008
    Beiträge
    104
    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

  10. #10
    Registriert seit
    Aug 2001
    Beiträge
    2.893
    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
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 5. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  11. #11
    Registriert seit
    Jan 2007
    Beiträge
    122
    Zitat Zitat von B.Hauser Beitrag anzeigen
    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.

  12. #12
    Registriert seit
    Feb 2001
    Beiträge
    20.370
    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;
    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

Similar Threads

  1. Kein Zugriff über QNTC auf Win-Share
    By marmart in forum IBM i Hauptforum
    Antworten: 5
    Letzter Beitrag: 25-09-07, 15:29
  2. QNTC Zugriff auf CD Laufwerk Fehlerhaft
    By pwrdwnsys in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 07-11-06, 15:34
  3. auf aktiven Job prüfen
    By TARASIK in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 26-10-06, 11:07
  4. Status nach Druck nich SAV, sonder Drucker auf END
    By zannaleer in forum NEWSboard Drucker
    Antworten: 6
    Letzter Beitrag: 13-09-06, 10:35
  5. Alpha-Feld auf nummerisch prüfen
    By Sulla in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 29-12-05, 10:41

Berechtigungen

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