[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte

Hybrid View

  1. #1
    Registriert seit
    Feb 2008
    Beiträge
    104
    müßte doch eigentlich noch einfacher gehen:

    text = %xlate('0':' ':text)

  2. #2
    Registriert seit
    Feb 2008
    Beiträge
    11
    Habe es aktuell mit dem CHECK gelöst.

    Ich werde aber in der nächsten Woche
    die beiden anderen Vorschläge von Euch
    auch noch einmal testen und
    dann Rückmeldung geben.

    Gruß Dirk

  3. #3
    Registriert seit
    Mar 2005
    Beiträge
    74
    Zitat Zitat von Khholm Beitrag anzeigen
    müßte doch eigentlich noch einfacher gehen:

    text = %xlate('0':' ':text)
    Diese Funktion würde alle Nullen entfernen, aus 00203 würde 2 3 werden.

    Ab V5R4 geht es mit %triml(text:'0').

  4. #4
    Registriert seit
    Nov 2003
    Beiträge
    2.433
    Sollen die führenden Nullen durch Leerzeichen ersetzt werden?

  5. #5
    Registriert seit
    Aug 2001
    Beiträge
    2.945
    Hallo,

    wenn Du Release V5R3 oder höher hast, kannst Du das Feld wie folgt umsetzen:

    PHP-Code:
     /Free
        EvalR MyNewFld 
    = %TrimR(%TrimL(MyOldFld'0'))
     /
    End-Free 
    Eventuell kann auf den %TrimR sogar verzichtet werden, da der Feld-Inhalt durch EVALR bereits rechtsbündig ausgerichtet wird.

    Solltest Du noch nicht auf Release V5R3 sein, kannst Du die führenden Nullen mit embedded SQL entfernen und das Ergebnis dann mit EVALR und %TrimR rechtsbündig ausrichten:

    PHP-Code:
    c/Exec SQL   Set :MyNewFld Trim(Leading '0' from :MyOldFld)
    C/End-Exec
    C                 EVALR   MyNewFld 
    = %TrimR(MyNewFld
    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

  6. #6
    Registriert seit
    Nov 2007
    Beiträge
    7

    Und noch zwei Loesungen

    d TEXT S 4A INZ('0034')
    d NUM S 4S 0
    * No 1
    c eval TEXT = %trim(TEXT)
    c dow %subst(TEXT:1:1)='0'
    c if %subst(TEXT:1:1)='0'
    c eval %subst(TEXT:1:1)=' '
    c eval TEXT = %trim(TEXT)
    c endif
    c enddo
    c evalr TEXT = %trimr(TEXT)
    * No 2
    c move text num
    c eval text = %editc(num:'L')

  7. #7
    Registriert seit
    Feb 2001
    Beiträge
    20.808
    Na das nenne ich ja mal eine übertriebene Sicherheit:

    c dow %subst(TEXT:1:1)='0'
    c if %subst(TEXT:1:1)='0'
    c eval %subst(TEXT:1:1)=' '
    c eval TEXT = %trim(TEXT)
    c endif
    c enddo

    Im DOW wird ja bereits geprüft und warum soll ich was ersetzen, wenn ich es anschließend wieder wegschmeiße ?

    Der %EDITC ist da schon eher ein Ansatz, vervollständigt könnte das dann so aussehen:

    text = %char(%dec(TEXT:4:0)); // linksbündig

    evalr text = %char(%dec(TEXT:4:0)); // rechtsbündig
    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
    Nov 2007
    Beiträge
    7
    Danke! Ich habe vergessen, die Zeile mit "If %subst..." loeschen.

  9. #9
    Registriert seit
    Feb 2008
    Beiträge
    11

    Besten Dank für alle Tipps

    Hallo zusammen,

    erstmal besten Dank für alle Tipps.
    Nachdem ich alle Varianten ausprobiert
    habe, sind 2 Varianten für mich als
    Lösung dabei.

    1.) DOW %SUBST und
    2.) Exec SQL Set

    Da ich nur die führenden Nullen entfernt
    haben möchte konnte ich mit
    %Trim, %xlate und CHECKR nichts machen, da hier alle Nullen entfernt wurde, bzw. ich nicht das
    neuste Release zur Verfügung habe.

    Gruß Dirk

  10. #10
    Registriert seit
    Mar 2007
    Beiträge
    29
    Hallo,

    führende Nullen in Textfeldern entferne ich so:

    evalr MeinText = %char(%int(MeinText))


    Thommy

  11. #11
    Registriert seit
    Aug 2001
    Beiträge
    2.945
    @Thommy

    Hoffentlich steht in MyText nie etwas anderes als Ziffern drin!
    Schon wenn das Feld komplett *Blank wäre, bekommst Du ein Problem.

    ... und %Char richtet linksbündig aus.
    ... Blanks zwischen den Ziffern werden gnadenlos entfernt.
    ... und Dezimal-Trennzeichen und folgende Ziffern werden gnadenlos abgeschnitten.

    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

  12. #12
    Registriert seit
    Mar 2007
    Beiträge
    29
    @Birgitta

    die Frage des Threaderstellers war, wie ein mit Zahlen gefülltes Alphafeld ohne Vornullen dargestellt werden kann. Darauf habe ich mich selbstverständlich bezogen. Im Übrigen stellt mein Vorschlag das Ergebniss durchaus rechtsbündig, ganz links steht EVALR

    Thommy

Similar Threads

  1. SQL -> erstes Zeichen im Feld löschen
    By mikex01 in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 19-07-07, 08:18
  2. num -> alpha rechtsbündig mit dezimalzeichen
    By FNeurieser in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 09-02-07, 17:51
  3. num -> alpha aber linksbündig ohne führende nullen
    By FNeurieser in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 08-02-07, 15:26
  4. Alfa-Feld ----> Numerisches Feld
    By dino in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 30-11-06, 16:23
  5. RPG-ILE: Alpha --> Numeric
    By TomWaf in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 12-05-06, 10:07

Berechtigungen

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