-
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?
-
%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)
-
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
-
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
-
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
-
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????
-
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.
-
Hallo Fuerchau!
Bitte entschuldige Dich nicht - das macht mich verlegen
VIELEN DANK! DANKE!
Gute Zeit noch ...
Dirk
Similar Threads
-
By Beate in forum IBM i Hauptforum
Antworten: 4
Letzter Beitrag: 06-06-06, 09:34
-
By labm in forum NEWSboard Programmierung
Antworten: 3
Letzter Beitrag: 23-03-06, 11:17
-
By holly in forum NEWSboard Server Software
Antworten: 7
Letzter Beitrag: 18-01-06, 18:56
-
By DEVJO in forum IBM i Hauptforum
Antworten: 12
Letzter Beitrag: 24-03-05, 11:29
-
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
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks