Anmelden

View Full Version : Alphafeld in Dezimalfeld RPG



mgraskamp
22-09-05, 06:48
Hallo Zusammen,
ich möchte mit RPG ein 8-stelliges Alphafeld in ein Dezimalfeld (9,2) übertragen. In dem Alphafeld kann linksbündig eine Zahl stehen. Allerdings mit bis zu 2 Nachkommastellen (also z.B. 12,34) oder auch ohne Nachkommastelle (z.B. 1234). Außerdem kann es auch vorkommen, dass nur eine Nachkommastelle (z.B. 1,2) eingegeben wurde. Wie schaffe ich es am sinnvollsten, den eingegebenen Wert in ein Dezimalfeld zu transferieren.

Vielleicht hat jemand eine Idee!?!?

Robi
22-09-05, 08:19
Sowas wie pseudocode

' ':'0' xlate alphafeld alphafeld
%scan nach einem komma nach I
bei gefunden
alphafeld='0'+alpha_vor_dem_komma + alpha_nach_dem_koma
movel alpha nach num (10,2)
schleife : i mal num = num / 10

Gruß
Robi

B.Hauser
22-09-05, 08:53
Hallo Zusammen,
ich möchte mit RPG ein 8-stelliges Alphafeld in ein Dezimalfeld (9,2) übertragen. In dem Alphafeld kann linksbündig eine Zahl stehen. Allerdings mit bis zu 2 Nachkommastellen (also z.B. 12,34) oder auch ohne Nachkommastelle (z.B. 1234). Außerdem kann es auch vorkommen, dass nur eine Nachkommastelle (z.B. 1,2) eingegeben wurde. Wie schaffe ich es am sinnvollsten, den eingegebenen Wert in ein Dezimalfeld zu transferieren.

Vielleicht hat jemand eine Idee!?!?

Auf welchem Release arbeitest Du?
Ab Release V5R2 kann diese Konvertierung direkt mit der Built-In-Funktion %DEC() bewerkstelligt werden. Mit dieser Built-In-Funktion können alphanumerische Strings (incl. Punkt oder Komma als Trennzeichen) korrekt in numerische Felder konvertiert werden.



/Free
Monitor;
MyNum = %Dec(MyAlpha: 9: 2);
On-Error;
// Ungültige numerische Werte
EndMon;
/End-Free


Birgitta

mgraskamp
22-09-05, 13:29
Hast mich auf eine Idee gebracht. Ganz so funktionierte es nicht, daher habe ich den Quellcode noch etwas verändert.

h nomain
0002.00 f************************************************* *********************************************
0003.00 f
0004.00 f* Umsetzen Alphafeld in nummerisches Feld
0005.00 f
0006.00 f************************************************* *********************************************
0007.00 d §alph_numm pr 10 2 Umsetzen Alph->Numm
0008.00 d alpha 8 value
0009.00 p************************************************* *********************************************
0010.00 p §alph_numm b export
0011.00 d pi 10 2
0012.00 d alpha 8 value
0013.00 c************************************************* *********************************************
0014.00 d numm s 10 2
0015.00 d komma s 1 0 Stelle des Kommas
0016.00 d blank s 1 0 Stelle des Blanks
0017.00 d gueltig c '0123456789, ' Gültige Eingaben
0018.00 c*
0019.00 c gueltig check alpha ____99
0020.00 c if not *in99
0021.00 c eval komma=%scan(',':alpha)
0022.00 c if komma>0
0023.00 c ' ':'0' xlate alpha alpha
0024.00 c eval alpha = '0' + %subst(alpha:1:komma-1) +
0025.00 c %subst(alpha:komma+1:8-komma)
0026.00 c movel alpha numm
0027.00 c eval komma = 8-komma
0028.00 c else
0029.00 c eval blank=%scan(' ':alpha)
0030.00 c ' ':'0' xlate alpha alpha
0031.00 c movel alpha numm
0032.00 c eval komma = 8-blank+1
0033.00 c endif
0034.00 c do komma
0035.00 c eval numm = numm / 10
0036.00 c enddo
0037.00 c endif
0038.00 c return numm
0039.00 d************************************************* *********************************************
0040.00 p e

malzusrex
22-09-05, 14:49
Hallöchen !
Wenn Du den Code noch als CODE oder PHP posten würdest, dann lässt es sich noch leichter lesen.
zu beginn einfach CODE oder PHP in Eckigen Klammern und zum Ende der Quelle das ganze mit einem /code oder /php in Eckigen Klammern beenden

Gruß Ronald

Robi
22-09-05, 15:08
NaJa, mein Pseudocode ist auch nur ein Denkanstoß z.B. für unsere Azubi's.

machen müssen die (du) es dann schon selber.

aber....
Birgitta's Version ist doch viel besser ?
(wenn es auch für AlphaZahlen mit einem Komma funktioniert)
Wenn nicht kannst du ihre Version anpassen

egal, haubtsache dir wurde geholfen
robi

Fuerchau
22-09-05, 15:21
Ab Release V5R2 kann diese Konvertierung direkt mit der Built-In-Funktion %DEC() bewerkstelligt werden. Mit dieser Built-In-Funktion können alphanumerische Strings (incl. Punkt oder Komma als Trennzeichen) korrekt in numerische Felder konvertiert werden.
Birgitta
Und damit ist ein Dezimalpunkt/-Komma gemeint.

Werte wie 123,123 oder 123.12 werden korrekt umgesetzt, es ist egal ob Komma oder Punkt, er gilt immer als Dezimaltrenner.

Werte wie 123.123,12 bzw. 123,123.12 (also Tausender Trennung) werden nicht korrekt umgesetzt.

B.Hauser
22-09-05, 15:27
Werte wie 123.123,12 bzw. 123,123.12 (also Tausender Trennung) werden nicht korrekt umgesetzt.

In diesen Fällen kann man aber immer noch das Tausender-Trennzeichen durch *Blanks ersetzen und schon klappt auch das.



/Free
MyNum = %Dec(%Xlate('.': ' ': MyAlpha): 9: 2);


Birgitta