View Full Version : Alpha Feld -> Alpha Feld ohne führende Nullen
Hallo,
wenn Du Release V5R3 oder höher hast, kannst Du das Feld wie folgt umsetzen:
/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:
c/Exec SQL Set :MyNewFld = Trim(Leading '0' from :MyOldFld)
C/End-Exec
C EVALR MyNewFld = %TrimR(MyNewFld)
Birgitta
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')
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
Danke! Ich habe vergessen, die Zeile mit "If %subst..." loeschen.
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
Hallo,
führende Nullen in Textfeldern entferne ich so:
evalr MeinText = %char(%int(MeinText))
Thommy
@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
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
Hallo Comminity ...
ich weiss die Anfrage ist schon ein "wenig" älter ... aber da ich auch noch so einer Lösung gegrübelt habe hier mein Vorschlag (beides alpha felder mit länge 10) :
eval target = %subst(source: %check('0':source) :11 - check('0':source))
Besser spät als nie :-.()
Gruß,
Ralf
Und noch ein Trick:
dtext s 5a inz('0034')
c eval text = %char(%dec(TEXT:5:0))
c evalr text = %char(%dec(TEXT:5:0))