cicero22
03-09-07, 15:24
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 :DPUNKT +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 :DPUNKT +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?
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 :DPUNKT +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 :DPUNKT +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?