View Full Version : Daten convertieren
Hallo,
es ist jetzt 5 jahre her, daß ich mein letztes RPG-PGM erstellt habe.
Seither programmiere ich nur in ABAP/SAP. Ich benötige jetzt aber
für eine Schnittstelle ein kleines RPG-PGM. In diesem PGM muß ich aus
einer STRM-FILE eine DDS-File erstellen. Das ist mir soweit auch gelungen,
bis auf eine Kleinigkeit. Ich muß ein Alpha-Feld in ein Num-Feld mit Nachkomma-
stellen bringen und ich weis nicht mehr wie das geht.
Kann mir da jemand helfen????
Vorab meinen herzlichsten Dank
Magdalena
Hallo
vielleicht hilft eine Datenstruktur z.B.
d NUMDS ds
d NUM 1 10
d DEC 11 13
Dann einfach die DS mit Move füllen
Gruss
Michael
Hallo,
ich würde es mal mit folgenden Built-in Functions probieren:
num10_2 = %dec(%subst(Alpha:1:10) :10:2 )
Gruss
Torsten
Hallo,
nochmal herzlichen Dank für Eure Tips. Nachdem ich nun den
ILE-RPG Compiler installiert habe dürfte ich das hinbekommen.
Magdalena
Der normale RPG-Compiler macht das auch.
Mittels MOVE / MOVEL kann man Alpha nach numerisch konvertieren.
Wenn das Zeichenfeld z.B. mit 11 Stellen definiert ist und nur Ziffern enthält, kann ich das ganz normal in ein Dezimalfeld übertragen. Die Nachkommastellen werden während der Übertragung ignoriert.
Z.B.:
MOVE '12345' WKDECF 52
In WKDECF steht dann 123,45
Hallo funboard,
ich bin hier fast am verzweifeln. Habe folgendes programmiert
0040.00 C Z-ADD 0 COSTN 17 6
0041.00 /free
0042.00 wert = %trim(wert);
0043.00 costn = %dec(%subst(wert:1:10) :12:6 );
0044.00 /end-free
0045.00 C Z-ADD COSTN COST
0046.00 C Z-ADD 0 FBESN 17 5
0047.00 /free
0048.00 fbest = %trim(fbest);
0049.00 fbesn = %dec(%subst(fbest:1:11) :13:5 );
0050.00 /end-free
0051.00 C Z-ADD FBESN ONHAND
0052.00 C Z-ADD 0 RBESN 13 5
0053.00 /free
0054.00 rbest = %trim(rbest);
0055.00 rbesn = %dec(%subst(rbest:1:7) :9:5 );
0056.00 /end-free
Bis Zeile 45 funktioniert alles einwandfrei. In Zeile 55 steigt das PGM
aus mit der Fehlermeldung
Das Ziel für eine numerische Operation ist zu klein, um das Ergebnis
aufzunehmen.
Was zum Kuckuck stimmt da nicht???
Hallo Torsten,
sorry, habe in Deinem Hinweis leider nicht bis ganz nach unter
geschaut und Dich falsch angeredet.
Gruß
Magdalena
%trim und %subst kannst du dir erst mal schenken, da du damit nur führende Leerstellen entfernst.
%dec sind Leerzeichen allerdings vollkommen egal.
Wichtig ist, dass das Ergebnis von %dec in das Zielfeld übertragen werden kann.
Ich nehme mal an, deine Quelldaten enthalten kein Dezimalzeichen Punkt oder Komma, so dass du immer ganze Zahlen bekommst:
%dec(' 1234,12 ':11:2) => 000001234,12
%dec(' 1234 12':11:2) => 000123412,00 !
Schau genau an, wie deine Zahlen denn aussehen und verwende dann z.B.:
%dec(' 1234 12':11:0) / 100 => 000001234,12
aber:
%dec(' 1234 1 ':11:0) / 100 => 000000123,41 !
An Stelle der Konstanten denke dir einfach die Variable.
Hallo Torsten,
nochmals vielen Dank.
Problem gelöst.
Gruß
Magdalena