-
Alphafeld in Dezimalfeld RPG
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!?!?
-
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
-
DANKE!
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
-
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
-
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
-
 Zitat von mgraskamp
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.
PHP-Code:
/Free
Monitor;
MyNum = %Dec(MyAlpha: 9: 2);
On-Error;
// Ungültige numerische Werte
EndMon;
/End-Free
Birgitta
-
 Zitat von B.Hauser
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.
-
 Zitat von Fuerchau
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.
PHP-Code:
/Free
MyNum = %Dec(%Xlate('.': ' ': MyAlpha): 9: 2);
Birgitta
Similar Threads
-
By mk in forum NEWSboard Java
Antworten: 8
Letzter Beitrag: 21-04-11, 21:51
-
By robertki in forum NEWSboard Programmierung
Antworten: 25
Letzter Beitrag: 19-01-07, 08:42
-
By Stoeberl in forum NEWSboard Programmierung
Antworten: 8
Letzter Beitrag: 10-01-07, 10:58
-
By jth in forum NEWSboard Programmierung
Antworten: 1
Letzter Beitrag: 21-12-06, 11:13
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