[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Feb 2007
    Beiträge
    68

    Umsetzung Alpha=>Dec (edifact...)

    hi *all

    Also - es geht darum eine kleine Umsetzung von Edifact Daten in eine DB2 Datenbank zu realisieren. Hier bin ich momentan an einer Stelle, die mir so etwas zu kompliziert erscheint...

    Also - was will ich machen - der Original Satz sieht so aus:

    MOA+203:6591.17'

    Dahinter verbirgt sich ein Betrag 6591,17 Euro. Allerdings kann auch nur eine Nachkommastelle

    MOA+203:6591.1'
    => 6591,10 Euro

    oder auch gar keine Nachkommastelle

    MOA+203:6591'
    => 6591,00 Euro vorkommen.

    Bisher sieht die "vorläufige" Lösung so aus...

    DCHARFELD S 12A
    DNUMMFELD S 12S 2
    DL S 3S 0
    DDPUNKT S 3S 0
    DPUNKT S 3S 0
    DHOCHKOMMA S 3S 0
    DSTRING S 12A
    * Beispiel fuer die Edifact Daten.... (Ausschnitt)
    C EVAL CHARFELD = ' :411.7'''
    C*** EVAL CHARFELD = ' :1'''
    C EVAL DPUNKT = %SCAN(':': CHARFELD )
    C EVAL HOCHKOMMA = %SCAN('''': CHARFELD )
    C* MOVE 000000000000 STRING
    * mit Nachkomma
    C IF %SCAN('.' : CHARFELD) > 0
    C EVAL STRING = %SUBST(CHARFELD PUNKT +1 :
    C HOCHKOMMA - DPUNKT - 1)
    C EVAL PUNKT = %SCAN('.': STRING )
    C EVAL %SUBST(STRING: PUNKT: 1) = ','
    C EVAL NUMMFELD = %DEC(STRING: 5:2)
    C ENDIF
    * ohne Nachkomma
    C IF %SCAN('.' : CHARFELD) = 0
    C EVAL STRING = %SUBST(CHARFELD PUNKT +1 :
    C HOCHKOMMA - DPUNKT - 1)
    C STRING DSPLY
    C EVAL NUMMFELD = %INT(STRING)
    C ENDIF
    C**** EVAL NUMMFELD = %DEC(STRING: 5:2)
    *
    *
    C** DPUNKT DSPLY
    C** HOCHKOMMA DSPLY
    C CHARFELD DSPLY
    C STRING DSPLY
    C NUMMFELD DSPLY
    C SETON LR

    Geht das auch kürzer mit einem %EDITC oder so?

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.245
    %EDITC ist ja die Umkehrfunktion, mach einfach folgendes:

    eval start=%scan(':':mystring) + 1
    eval len=%scan('''':mystring:start) - start

    eval wert = %dec(%xlate(%substr(: mystring: start: len): '.' : ','): 5: 2)
    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
    Feb 2007
    Beiträge
    68
    ja du hast recht mit der umkehrfunktion.
    ich werde das morgen ausprobieren und bin wieder einmal begeistert von dir und dem forum hier...

    danke schonmal...
    dirk

  4. #4
    Registriert seit
    Feb 2007
    Beiträge
    68
    Hi Fuerchau.

    Ich muss leider nochmals nachhaken...

    Also - bis zur 3. Zeile kein Problem.

    Aber nun diese Zeile

    eval wert = %dec(%xlate(%substr(:mystring: start: len): '.' : ','): 5: 2)

    Also - erst mal denke ich muss es ja %subst heißen - und der erste : (vor mystring muss auch weg) - aber selbst wenn ich das alles mache steht "quasi" in Wert nur ein Komma ganz links...(und es kommt zu einem Fehler:Eine Zeichendarstellung eines numerischen Werts ist fehlerhaft (C G D F). ) Das bekomme ich zumindest heraus wenn ich die Funktion etwas zerpflücke.... Darf ich Dich nochmals bemühen mir zu helfen? Oder mache ich einen Fehler?

    Danke, Danke Dirk

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.245
    Prüfe die H-Einstellung für DECEDIT, ob Komma oder Punkt erwartet wird.
    %XLATE ersetzt eben '.' mit ',' und %dec erwartet dann eben eine Zahl mit oder ohne Komma.
    Eigentlich müsste es funktionieren.
    Der 1. Doppelpunkt muss tatsächlich weg (kommt wohl aus der SQL-Syntax).

    Zu beachen ist natürlich die Dezimalausprägung 5,2 heißt ja auch nur 3 Vorkomma. Da musst du schon die korrekte Gesamtanzahl angeben, eg. 9:2 für 7 VK.

    PS:
    Tippfehler dürften doch mal erlaubt sein
    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

  6. #6
    Registriert seit
    Feb 2007
    Beiträge
    68
    Hi Fuerchau!

    Selbstverständlich war dies keine Kritik! Entschuldige wenn das so rüberkam. Ich möchte ja nur, dass andere Suchende nicht die gleichen Probleme haben wie ich... Das mit DECEDIT war natürlich entscheidend. Aber ich habe immer noch ein Verständnis Problem...

    Folgendes:
    Wenn ich diese Geschichten zerlege - so in etwa...
    eval string2 = %subst( mystring:
    start: len)
    eval string3 = %xlate(string2: '.' : ',')

    und mir danach mit Debug STRING3 anzeigen lasse steht da nur

    STRING3 = ', '

    drinne - und das ist so noch ein bisschen mein Verständnisproblem...

    Ich kann ja auch theoretisch das XLATE weglassen wenn ich mit DECEDIT gleich auf '.' gehe, nichtwahr???

    Was mache ich falsch????

  7. #7
    Registriert seit
    Feb 2001
    Beiträge
    20.245
    Das ist halt so, wenn man Befehle aus dem Kopf tippt:

    %xlate(from:to:myvar)

    also
    %xlate('.':',':Mystring)

    Bitte wieder mal um Entschuldigung.

    Was das Komma angeht, hast du natürlich Recht, DECEDIT bestimmt die Erwartung, %xlate stellt diese dann nur sicher, falls doch mal ein Punkt statt Komma (aus USA, GB oder sonstwo her) kommt.
    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
    Feb 2007
    Beiträge
    68
    Hallo Fuerchau!

    Bitte entschuldige Dich nicht - das macht mich verlegen

    VIELEN DANK! DANKE!

    Gute Zeit noch ...

    Dirk

Similar Threads

  1. Antworten: 4
    Letzter Beitrag: 06-06-06, 09:34
  2. OPNQRYF im MAPFLD umsetzung numerisch zu Alpha (Digits)
    By labm in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 23-03-06, 11:17
  3. EDIFACT auf iSeries
    By holly in forum NEWSboard Server Software
    Antworten: 7
    Letzter Beitrag: 18-01-06, 18:56
  4. Umsetzung von Umlauten
    By DEVJO in forum IBM i Hauptforum
    Antworten: 12
    Letzter Beitrag: 24-03-05, 11:29
  5. Umsetzung 5250 Anwendungen mit Websphere
    By sufukli in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 09-07-02, 14:16

Berechtigungen

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