Schrift
[thread]78[/thread]

frage zu sprintf oder ähnlichem: zerofill bzw. führende null einer zahl

Leser: 4


<< >> 8 Einträge, 1 Seite
popcorn5
 2003-10-23 06:46
#7801 #7801
User since
2003-09-24
60 Artikel
BenutzerIn
[default_avatar]
hi...

hab da ne zahl die in einer schleife hochgezählt wird: $a++;

ich brauche aber für ne abfrage eine zahl mit 2 zeichen, also alles was kleiner als 10 ist, soll ne führende null bekommen.

1 => 01
2 => 02 usw.

sprintf ???

danke !
popcorn5
 2003-10-23 06:57
#7802 #7802
User since
2003-09-24
60 Artikel
BenutzerIn
[default_avatar]
hmmm... hab mir erst mal selber geholfen:

if(length($a) < 2){ $a="0".$a; }

ist zwar bissi doof, geht aber :)
also, hätte da gerne was besseres stehen.
ich bin jetzt zu faul im kochbuch zu lesen.
format_c
 2003-10-23 10:23
#7803 #7803
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
use strict;
for (0..5) {
 printf "%02d\n",$_;
}
_ _ END _ _
00
01
02
03
04
05

Das selbe hgeht mit sprintf nur dass sprintf nur den formatierten String zurückgibt und nicht ausgibt.

Zum Verständnis:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
use strict;
for (0..10) {
printf "%04d\n",$_;
}
_ _ END _ _
0000
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010


Gruß alex
Edit: Siehe perldoc -f sprintf\n\n

<!--EDIT|format_c|1066890392-->
havi
 2003-10-23 11:45
#7804 #7804
User since
2003-08-04
2036 Artikel
BenutzerIn
[Homepage]
user image
[quote=popcorn5,23.10.2003, 04:57]hmmm... hab mir erst mal selber geholfen:

if(length($a) < 2){ $a="0".$a; }

ist zwar bissi doof, geht aber :)
also, hätte da gerne was besseres stehen.
ich bin jetzt zu faul im kochbuch zu lesen.[/quote]
Auch eine Loesung :)
popcorn5
 2003-10-24 01:40
#7805 #7805
User since
2003-09-24
60 Artikel
BenutzerIn
[default_avatar]
Danke :)

genau das habe ich gesucht...

@havi: wie sagt man so schön: dumm darf ich ruhig sein, hauptsache ich weiss mir zu helfen !
betterworld
 2003-10-24 22:04
#7806 #7806
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
Ich mache so etwas gerne so:
Code: (dl )
($a="00".$a) =~ s/.*(..)/$1/
\n\n

<!--EDIT|betterworld|1067018766-->
Crian
 2003-10-25 04:16
#7807 #7807
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Dann lieber mit Substring:

Code: (dl )
$a=substr("00".$a, -2, 2);


Edit: (s)printf ist aber eleganter...\n\n

<!--EDIT|Crian|1067041071-->
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
betterworld
 2003-10-25 04:58
#7808 #7808
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
Warum nicht so
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
28
29
30
31
32
use strict;
use warnings;

my $x=123;
use constant LENGTH=>5;
use constant LOG10=>2.30258509299405;
$_ = $x;
if(s/.//){s/./0/g; s/^/1/;}

my $shorth= int(1.5+&Log() / LOG10);
my $shorth2=int(1.5+ log() / LOG10);
if($shorth != $shorth2) {die "logirithmical error";}
die "too long" if $shorth > LENGTH;
$x = 0 x (LENGTH-$shorth) . $x;
print "$x\n";

sub Log{
my($r)=@_ ? @_ : ($_);
if(abs($r)>=1){
return -&Log(1/$r);
}
$r-=1;
my $sign=1;
my $ret=0;
my $f=1;
for my $n (1..40){
$f*=$r;
$ret+=$sign*$f/$n;
$sign=-$sign;
}
return $ret;
}

Entschuldigt bitte, aber ich hatte halt etwas Langeweile\n\n

<!--EDIT|betterworld|1067044018-->
<< >> 8 Einträge, 1 Seite



View all threads created 2003-10-23 06:46.