Hallo Hannes!
beispiel:
printf("%10.2f", 2304);
ergibt 2304.00
nun hätte ich aber gerne dass hier 2 304.00 steht damit
die menschen (und ich auch) die sache besser lesen könnenich suchte bis jetzt nach einer eleganten methode - mit
einer lässigen schleife lässt sich sowas natürlich auch
realisieren - ist mir klar :)
Mir fallen bei so einem Problem immer nur RegularExpressions ein ;-)
Das Problem hierbei ist, daß man nicht einfach Dreierblöcke von vorne nach hinten nehmen kann. Diese sollte ja nun vom Punkt (oder vom Zeilenende) aus gebildet werden. Wenn ich aber beim Punkt anfange, müssten die nächsten Ersetzungen weiter links ansetzten. Eine RE wird aber mehrfach nur von links nach rechts angewendet!
Ich muß also am Anfang einen ein bis drei Zeichen langen Block "\d{1,3}" finden, dem bis zu einem Punkt oder dem Zeilenende "(.$)" eine beliebige anzahl von Dreierblöcken folgt "(\d{3})+". Diese Blöcke darf ich aber nur als lookahead suchen, da ein folgender Ersetzungsdurchgang diese mitbearbeiten soll "(?= ... )"
Das zusammen ergibt:
$zahlAlsText =~ s/(\d{1,3})(?=(\d{3})+(.$))/$1 /g;
Jetzt gibt es nur noch ein Problem: Die Zahlenketten hinter dem Punkt werden auch bearbeitet, wenn dort mindestens vier Stellen auftachen :(
Aber ich will ja auch nicht alles verraten ;-)
Viel Spaß,
Jörk