©
serviceprofessionalgmbh
©
gerardschildberger@newsgroup
Werden Zahlen in Druckausgaben benötigt, empfiehlt es sich der besseren Lesbarkeit wegen, diese entsprechend aufzubereiten.
Das Beispiel zeigt ein Programm, welches parameter-abhängig die Druckaufbereitungszeichen einfügt oder entfernt.
Dezimalbrüche in REXX haben als Dezimalzeichen einen Punkt. Druckaufbereitete Zahlen sollen als Dezimalzeichen ein Komma erhalten
und den Punkt als Tausender-Trennzeichen benutzen.
Bei der Reformatierung werden alle Tausender-Trennzeichen entfernt und das Dezimalzeichen Komma gegebenenfalls wieder durch
Punkt ersetzt.
/* REXX * NUMFORM
erg = function("12345.67","D") >> 12.345,67
erg = function("12.345,67","R") >> 12345.67
*/
parse source . TYP .
if TYP = "FUNCTION" then arg WERT,ART,DMY
else arg WERT ART DMY
WERT = strip(WERT)
if ART <> "R" then ART = "D"
select
when ART = "R" then call format_rechenfaehig
when ART = "D" then call format_druckaufbereitet
otherwise nop
end
return NEW
format_rechenfaehig:
parse var WERT INTEGER "," DECIMAL
NEW = space(translate(INTEGER," ","."),0)
if DECIMAL <> "" then NEW = NEW"."DECIMAL
return NEW
format_druckaufbereitet:
parse var WERT INTEGER "." DECIMAL
INTEGER = reverse(INTEGER)
NEW=""
do I = 1 to length(INTEGER)
NEW = NEW !! substr(INTEGER,I,1)
if I // 3 = 0 then do
NEW = NEW"."
end
end
NEW = reverse(NEW)
if left(NEW,1) = "." then NEW = substr(NEW,2)
if DECIMAL <> "" then NEW = NEW","DECIMAL
return NEW
Das folgende Beispiel zeigt einmal mehr die Macht von REXX.
Original comment:
I wrote this little ditty some time ago, and it has no limits on the lenth of the number [i.e., doesn't rely on DIGITS()],
supports leading signs, supports leading/trailing/imbedded blanks (as REXX numbers can have), supports exponentated numbers,
and also supports any character(s) for the comma [i.e., as some European countries use periods (.) instead of commas (,)],
and also can format strings like $123456.78 ---> $123,456.78 and other such monitary numbers. The routine if very fast.
Format: xxx=comma(yyy)
--or--: xxx=comma(yyy,newcommacharacter)
/* REXX * NUMFORM
PARM1 = ZU FORMATIERENDER WERT
PARM2 = DEZIMAL-TRENNZEICHEN
*/
PARSE ARG _, C;
IF C=='' THEN C=".";
DEZP = SUBSTR(".,.",POS(C,".,.")+1,1)
PARSE VAR _ _ (DEZP) DEZ
N=_'.9'
DO J=VERIFY(N,1234567890,,VERIFY(N,1234567890.,'M'))-4 TO ,
VERIFY(N,987654321,"M") BY -3
_=INSERT(C,_,J)
END
IF DEZ <> "" THEN _ = _ !! DEZP !! DEZ
RETURN _
/* REXX * DRIVER
*/
SAY NUMFORM("7677652.435432",",")
SAY NUMFORM("76776524354,32",".")
EXIT
zurück zu Hilfen im Alltag