[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte
  1. #1
    Registriert seit
    Aug 2002
    Beiträge
    77

    "13.456,78" in Zahl 12345678 umwandeln

    Hi Forum, bevor ich jetzt das rad neu erfinde, hat vielleicht jemand einen Codeschnipsel, um aus einem Alpaafeld die nummerischen Werte ohne dezimalpunkt und Komma rechtsbündig zurückzugeben?
    Wäre schick.
    Danke

    Andreas
    Andreas
    ***Wer einen Schreibfehler findet darf ihn behalten***

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Wie wäre es mit:
    evalr Zielfeld = %char(%dec(%dec(Quellfeld:10:2) * 100:12:0))
    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

  3. #3
    Registriert seit
    Aug 2002
    Beiträge
    77
    Zitat Zitat von Fuerchau
    Wie wäre es mit:
    evalr Zielfeld = %char(%dec(%dec(Quellfeld:10:2) * 100:12:0))
    Hallo Fuerchau,
    danke für die prompte Antwort.
    Leider mag der compiler (V5R1) den code so nicht.
    Code:
    D Alpha           S              9A   inz('13.456,78')                      
    D Num             S             10S 2 inz(0)                                
    C                   evalr     num = %char(%dec(%dec(Alpha:09:2)*100:12:0))  
    C                   eval      *inlr = *on                                   
    *RNF0327 30      5 000300  Der erste Parameter für %DEC oder %DECH ist ungültig.
    wo könnte mein Fehler liegen?
    %dec als numerischen Ausdruck %dec mitzugeben habe ich ehrlich gesagt auch noch nie probiert.
    %char bräuchte ich in diesem Feld nicht unbedingt, da ich ja mit dem Ergebnis rechnen möchte (daher numerische Werte rauspicken)
    Gruß
    Andreas
    ***Wer einen Schreibfehler findet darf ihn behalten***

  4. #4
    Registriert seit
    Aug 2001
    Beiträge
    2.873
    Zitat Zitat von AndreasH
    C evalr num = %char(%dec(%dec(Alpha:09:2)*100:12:0))
    Hallo Andreas,

    Erst ab Release V5R2M0 ist es möglich über Built-in-Funktionen alphanumerische Werte in numerische Werte zu konvertieren.

    Allerdings dürfte der Code auch unter Release V5R2M0 nicht funktionnieren, da die Built-in-Funktionen %Dec, %DecH, %Int, %IntH, %Uns und %UnsH keine Tausender-Trennzeichen konvertieren können. Die Tausender-Trennzeichen müssten zunächst über %XLate in *Blanks konvertiert werden. Dezimal-Trennzeichen sind kein Problem. Dabei kann Punkt und Komma alternativ verwendet werden.

    Unter V5R1M0 hast Du nur die Möglichkeit das Ganze zu Fuss zu programmieren, d.h. die Tausender-Zeichen und das Dezimal-Trennzeichen zu entfernen, den Feld-Inhalt rechtsbündig ausrichten und dann mit dem guten alten MOVE in ein numerisches Feld zu schieben.

    Birgitta
    Birgitta Hauser

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

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Das Problem der %dec-Funktion liegt wohl darin, das als 1. Argument kein Return-Wert einer anderen Funktion akzeptiert wird.
    Also ggf. schrittweise vorgehen:

    eval alpha = %xlate(alpha:'.,':' ')

    Da du ja den Ganzzahlwert brauchst, kannst du Komma und Punkt ersetzen (vorausgesetzt, die Anzahl Nachomma sind immer gleich).

    eval numfeld = %dec(alpha:9:0)

    Dies müsste auch unter V5R1 klappen.

    @Birgitta
    Das mit dem move geht insoweit in die Hose, als dass Leerzeichen zwischen den Ziffern als '0' angenommen werden.
    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

  6. #6
    Registriert seit
    Aug 2002
    Beiträge
    77
    Hallo zusammen,
    leider gehts scheinbar tatsächlich nur zu Fuß.
    Code:
    D Alpha           S              9A   inz('13.456,78')        
    D Num             S             10S 2 inz(0)                  
    C                   eval      Alpha = %xlate(Alpha:'.;':' ')  
    C                   evalr     num = %dec(Alpha:09:00)         
    C                   eval      *inlr = *on
    Code:
     *RNF0327 30      6 000400  Der erste Parameter für %DEC oder %DECH ist ungültig.     
     *RNF7565 30      6 000400  Das Ergebnis einer Operation EVALR ist kein Zeichen- oder 
                                Grafikfeld fester Länge.
    Gruß und schönes Wochenende
    Andreas
    ***Wer einen Schreibfehler findet darf ihn behalten***

  7. #7
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    "evalr" geht natürlich nur für Zeichenfelder. Bei numerischen gilt nur "eval".

    Bei der Definition von "Alpha" lass das "A" für den Typ weg !
    Damit bestimmst du ein reines ALpha-Feld und kein CHARACTER-Feld. Daher der 1. Fehlerhinweis.

    D Alpha S 9 inz('13.456,78')
    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.873
    Hallo Leute,

    warum glaubt Ihr mir eigentlich nicht, dass die Built-in-Funktionen %Dec usw. erst ab V5R2M0 in der Lage sind alphanumerische Werte in numerische Werte zu konvertieren.

    @Fuerchau
    Ich hatte mich wohl etwas unklar ausgedrückt, mit Tausender- und Dezimal-Trennzeichen entfernen, habe ich natürlich nicht gemeint sie einfach durch *Blanks zu ersetzten, sondern den String zusammen zu schieben.

    Character und Alpha-Felder sind das Gleiche! Zumindest gibt es nirgends in der Dokumentation einen Hinweis, dass es Unterschiede geben könnte.

    Birgitta
    Birgitta Hauser

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

  9. #9
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    @Birgitta

    Ich habe immer in das Handbuch "ILE-RPG Reference c0925084.pdf" von August 2002 geschaut, und siehe, das ist ja doch schon V5R2 (schon so lange her, tztz).

    Also bitte vielmals um Vergebung !
    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

  10. #10
    Registriert seit
    Aug 2002
    Beiträge
    77
    Danke euch nochmal.
    Gruß
    Andreas
    ***Wer einen Schreibfehler findet darf ihn behalten***

  11. #11
    Registriert seit
    May 2005
    Beiträge
    5

    Wink geht auch mit SQL

    Der Beitrag ist zwar schon lange erledigt, aber ich gebe trotzdem noch meinen Senf dazu.
    mychar hat den Wert '123.456,78'.

    Mit SQL bzw. embedded SQL würde es so aussehen:
    select
    cast(
    replace(mychar, '.', '')
    as decimal(9, 2))
    from mytable

    Uwe

  12. #12
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Seit wann gibts "replace" ?
    V5R2 ?
    V5R3 ?
    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

Similar Threads

  1. Query/400 Dateitypen umwandeln
    By helion60 in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 08-11-06, 15:48
  2. IPDS zu PCL umwandeln
    By Murat in forum NEWSboard Drucker
    Antworten: 2
    Letzter Beitrag: 22-10-06, 12:28
  3. O-Bestimmungen in PRTF umwandeln
    By muadeep in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 03-07-06, 09:50
  4. Antworten: 7
    Letzter Beitrag: 15-05-05, 15:05
  5. Spools 1:1 in *PDF umwandeln
    By Kilianski in forum NEWSboard Server Software
    Antworten: 0
    Letzter Beitrag: 13-01-05, 13:55

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •