[NEWSboard IBMi Forum]

Thema: warum 0

  1. #1
    Registriert seit
    Sep 2005
    Beiträge
    425

    warum 0

    Hi @all
    kann mir mal einer erklären warum das 0 und nicht 3 ist ?

    D xxx DS
    D SUST 1 0 Dim(100)
    D IXX 3 0 inz
    ...
    D ATR3 S 1
    ...
    C eval SUST(2)= 8
    ...
    C EVAL IXX = 2
    ...
    C EVAL ATR3 = %EDITC((SUST(IXX)-5):'X')

    Ergebmis in ATR3 : 0 statt 3, warum ?

    gruß
    IleMax

  2. #2
    Registriert seit
    Nov 2007
    Beiträge
    7
    ATR3 muss mindestens 2A sein.

  3. #3
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Hallo,

    SUST(IXX)-5 generiert ein 2-stelliges Ergebnis, '03'
    Durch den EVAL und den %EditC wird nur die 1.Stelle in das einstellige Text-Feld übertragen. Demzufolge ist das Ergebnis 0

    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

  4. #4
    Registriert seit
    Sep 2005
    Beiträge
    425

    Danke

    Vielen Dank euch beiden für die Info.
    wobei
    einstelliges Feld minus einstelliges Feld = 2 stelliges Feld aus meiner sicht etwas seltsam ist
    naja, RPG halt
    Danke
    ILEMax

  5. #5
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    naja, mit solchen Problemen muss man immer rechnen bei geschachtelten Ausdrücken (und beim rechnen mit Literalen). Die Zuweisung hat immer die niedrigste Priorität und Klammern haben Vorrang. Der Compiler legt sich dann nach irgendwelchen Regelwerken (die man manchmal in der Reference findet, manchmal nicht) Zwischenvariablen an und die für (SUST(...) - 5) ist hier halt zweistellig (nach dem Fressermotto lieber den Magen verrenken als was zu verschenken). Man hat jetzt mehrere Möglichkeiten:
    - man lernt die Reference auswendig
    - man sagt klar, was man haben will
    -- nicht schachteln
    -- Zwischenvariablen selber anlegen
    -- casten (-> %editc(%dec(sust...): 1 : 0)), oder so ähnlich)

    D*B


    Zitat Zitat von ILEMax Beitrag anzeigen
    Vielen Dank euch beiden für die Info.
    wobei
    einstelliges Feld minus einstelliges Feld = 2 stelliges Feld aus meiner sicht etwas seltsam ist
    naja, RPG halt
    Danke
    ILEMax
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

Berechtigungen

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