Schrift
[thread]7177[/thread]

tausenderpunkt in zahl einfügen

Leser: 1


<< |< 1 2 >| >> 19 Einträge, 2 Seiten
Froschpopo
 2005-07-31 15:36
#56858 #56858
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
ich hab zahlen:

30000
100000
4000

jetzt will ich nen Punkt an folgende stellen haben:

30.000
100.000
4.000

wie kann man das automatisieren?
pq
 2005-07-31 15:52
#56859 #56859
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
perldoc -q commas
(http://wiki.perl-community.de/bin....rs_with)\n\n

<!--EDIT|pq|1122810770-->
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
Strat
 2005-08-01 13:09
#56860 #56860
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code: (dl )
1 while $zahl =~ s/(\d+)(\d{3})/$1.$2/;
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
Crian
 2005-08-01 13:25
#56861 #56861
User since
2003-08-04
5870 Artikel
ModeratorIn
[Homepage]
user image
*funktionauspack*

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
sub taupu ($) {
#--------------------------------------------------------------------------
# sub : t a u p u
#--------------------------------------------------------------------------
# Autor : CD
# Aufgabe : Zahlen mit Tausendertrenner (".") ausgeben und Komma als
# Dezimaltrenner verwenden.
# (Kopiert aus dem Perl-Cook-Book und angepasst.)
# Parameter : Auszugebende Zahl
# Rückgabewert : Zahl mit Punkten
#--------------------------------------------------------------------------
# 0.0.1 - 10.12.2002 - CD - Erstellt
#--------------------------------------------------------------------------

my $text = reverse $_[0];
$text =~ s:\.:,:g; # deutsches Komma als Dezimaltrenner
$text =~ s/(\d\d\d)(?=\d)(?!\d*,)/$1./g;
return scalar reverse $text;
} # sub taupu
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
esskar
 2005-08-01 14:26
#56862 #56862
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
soviel kommentare würden mich nerven;
da würde ich eher den subnamen eindeutig und sprechender wählen
Crian
 2005-08-01 14:39
#56863 #56863
User since
2003-08-04
5870 Artikel
ModeratorIn
[Homepage]
user image
das kommt stark darauf an, wie viele Funktionen man hat und wieviele Entwickler am Projekt arbeiten. Mich nervt schlecht dokumentierter Programmcode.

Angewöhnt hab ich mir das in einer Firma, wo man in einem 18-köpfigem Team an einem großen Programm gearbeitet hat. Da reichen die CVS-Kommentare allein nicht aus, da brauchts auch eine Versionierung der Funktionen.

Naja, jeder wie er mag ;)
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
esskar
 2005-08-01 14:51
#56864 #56864
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=Crian,01.08.2005, 12:39]Mich nervt schlecht dokumentierter Programmcode.[/quote]
sowas kann arbeitsplätze sichern! :)
Strat
 2005-08-01 14:53
#56865 #56865
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
Stimmt; ich bin in der Regel auch ein 4-18koepfiges Perl-Entwicklerteam :-D

Ich versuche, die Sub schon so sprechend zu nennen, dass allein beim Namen schon klar wird, was sie macht (z.B. nicht &taupu(), sondern &FuegeTausenderPunkteEin()

Das mit der Sub-Versionierung mache ich bei groesseren Projekten teilweise auch, und aenderungen begruenden sogar recht haeufig.\n\n

<!--EDIT|Strat|1122893836-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
Taulmarill
 2005-08-01 15:07
#56866 #56866
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
ähm, also entweder hab ich mich hier komplett verhauen, oder die regexe von strat und crian funktionieren nicht (richtig), code:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
use warnings;
use strict;

my @numb3rs = qw/1024 16777215 3,1415926 42 759092417205229390873,8763617/;

for my $num ( @numb3rs ) {
print "number: $num\n";
my $regexed = $num;
$regexed =~ s/(^[-+]?\d+?(?=(?>(?:\d{3})+)(?!\d))|\G\d{3}(?=\d))/$1./g;
print "perlfaq: $regexed\n";
$regexed = $num;
$regexed =~ s/(\d+)(\d{3})/$1.$2/;
print "strat: $regexed\n";
$regexed = $num;
$regexed =~ s/(\d\d\d)(?=\d)(?!\d*,)/$1./g;
print "crian: $regexed\n";
} continue {
print '=' x 75, "\n"
}

ausgabe:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
peters@ronin:~> perl test.pl
Possible attempt to separate words with commas at test.pl line 4.
number: 1024
perlfaq: 1.024
strat: 1.024
crian: 102.4
===========================================================================
number: 16777215
perlfaq: 16.777.215
strat: 16777.215
crian: 167.772.15
===========================================================================
number: 3,1415926
perlfaq: 3,1415926
strat: 3,1415.926
crian: 3,141.592.6
===========================================================================
number: 42
perlfaq: 42
strat: 42
crian: 42
===========================================================================
number: 759092417205229390873,8763617
perlfaq: 759.092.417.205.229.390.873,8763617
strat: 759092417205229390.873,8763617
crian: 759092417205229390873,876.361.7
===========================================================================
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
Crian
 2005-08-01 15:09
#56867 #56867
User since
2003-08-04
5870 Artikel
ModeratorIn
[Homepage]
user image
vielleicht solltest Du nicht nur einen Ausschnitt der Funktion nehmen ;)
eventuell haben die beiden reverses doch was zu bedeuten ^^

Zum Namen der Funktion: da habt ihr Recht. Es war eine Mischung zwischen nicht zu lang aber noch sprechend. Dafür ist diese Funktion bei mir in einem überschaubaren Modul mit Tools. Deshalb - und weil ich sie recht oft anwende - weiß ich schon, was "taupu" macht.

Oder ich bin noch zu stark geprägt von der Fortan Zeit. Da konnten Funktionen maximal 6 Zeichen lang sein.

Und wenn, dann nicht FuegeTausenderPunkteEin, sondern fuege_tausenderpunkte_ein ... oder insert_dots ;)\n\n

<!--EDIT|Crian|1122894833-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
<< |< 1 2 >| >> 19 Einträge, 2 Seiten



View all threads created 2005-07-31 15:36.