[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Sep 2005
    Beiträge
    32

    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!?!?

  2. #2
    Registriert seit
    Jun 2001
    Beiträge
    2.044
    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

  3. #3
    Registriert seit
    Sep 2005
    Beiträge
    32

    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

  4. #4
    Registriert seit
    May 2002
    Beiträge
    1.121
    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

  5. #5
    Registriert seit
    Jun 2001
    Beiträge
    2.044
    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

  6. #6
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Zitat 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(MyAlpha92);
       
    On-Error;
           
    // Ungültige numerische Werte
       
    EndMon;
     /
    End-Free 
    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 5. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  7. #7
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    Zitat 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.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  8. #8
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Zitat 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): 92); 
    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 5. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

Similar Threads

  1. Rückgabewert vom RPG Programm
    By mk in forum NEWSboard Java
    Antworten: 8
    Letzter Beitrag: 21-04-11, 21:51
  2. RPG: Client Infos lesen?
    By robertki in forum NEWSboard Programmierung
    Antworten: 25
    Letzter Beitrag: 19-01-07, 08:42
  3. Problem mit Java-Methoden Aufruf aus ILE RPG?
    By Stoeberl in forum NEWSboard Programmierung
    Antworten: 8
    Letzter Beitrag: 10-01-07, 10:58
  4. RPG goes Web
    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
  •