OVH Cloud OVH Cloud

formattage...

3 réponses
Avatar
kurtz le pirate
bonjour,

une petite question à propos des printf, sprintf,...

j'ai par exemple une ligne comme ça :

printf "%03d\n",$i;

qui, comme vous le savez, imprime la valeur de $i sur 3 caractères
précédé eventuellement de zéros. comment faire pour que le nombre de
caractères soit dans une variable ?

j'ai bien sur essayé %0$fd avec $f=3 et ça marche pas et j'ai l'erreur :

Global symbol "$fd" requires explicit package name


une idée ?
merci bien

3 réponses

Avatar
Jacques Caron
Salut,

On Mon, 11 Apr 2005 10:40:37 +0200, kurtz le pirate
wrote:

j'ai par exemple une ligne comme ça :

printf "%03dn",$i;

qui, comme vous le savez, imprime la valeur de $i sur 3 caractères
précédé eventuellement de zéros. comment faire pour que le nombre de
caractères soit dans une variable ?


Je cite perdoc -f sprintf:

Where a number would appear in the flags, an asterisk ("*")
may
be used instead, in which case Perl uses the next item in
the
parameter list as the given number (that is, as the field
width
or precision).

Donc:

printf "%0*dn",$f,$i;

j'ai bien sur essayé %0$fd avec $f=3 et ça marche pas et j'ai l'erreur :
Global symbol "$fd" requires explicit package name


Normal, il ne voit pas où le nom de variable s'arrête. Tu peux écrire:

printf "%0${f}dn",$i;

Jacques.
--
Interactive Media Factory
Création, développement et hébergement
de services interactifs: SMS, SMS+, Audiotel...
http://www.imfeurope.com/

Avatar
kurtz le pirate
In article ,
"Jacques Caron" wrote:

Salut,

On Mon, 11 Apr 2005 10:40:37 +0200, kurtz le pirate
wrote:

j'ai par exemple une ligne comme ça :

printf "%03dn",$i;

qui, comme vous le savez, imprime la valeur de $i sur 3 caractères
précédé eventuellement de zéros. comment faire pour que le nombre de
caractères soit dans une variable ?


Je cite perdoc -f sprintf:

Where a number would appear in the flags, an asterisk ("*")
may
be used instead, in which case Perl uses the next item in
the
parameter list as the given number (that is, as the field
width
or precision).

Donc:

printf "%0*dn",$f,$i;

j'ai bien sur essayé %0$fd avec $f=3 et ça marche pas et j'ai l'erreur :
Global symbol "$fd" requires explicit package name


Normal, il ne voit pas où le nom de variable s'arrête. Tu peux écrire:

printf "%0${f}dn",$i;

Jacques.



j'y pense jamais a ce perldoc ! merci jacques.

dans le chameau bleu, j'avais pas fait attention au paragraphe suivant :
<<La ou un nombre pourrait apparaître dans les flags, une astérisque
(<<*>>) peut être utilisée en lieu et place, auquel cas Perl utilise la
prochaine entité dans la liste d'arguments comme le nombre donné (c'est
à dire, comme le champ de largeur ou de precision).>>

pas très explicite et comme il n'y a pas d'exemple...



Avatar
SB
kurtz le pirate writes:


j'ai par exemple une ligne comme ça :

printf "%03dn",$i;

qui, comme vous le savez, imprime la valeur de $i sur 3 caractères
précédé eventuellement de zéros. comment faire pour que le nombre de
caractères soit dans une variable ?


Utiliser la concaténation:

$perl -e ' $a=3;printf "%0".$a."dn",$i;'
000

j'ai bien sur essayé %0$fd avec $f=3 et ça marche pas et j'ai l'erreur :

Global symbol "$fd" requires explicit package name


Il croit que la vrariable s'appelle $fd, il faut utiliser les
accolades pour lever l'ambiguïté:

$perl -e '$f=3;printf "%0${f}dn",$i;'
000

--
Encyclopédie libre, gratuite, à laquelle tout le monde peut
collaborer: http://fr.wikipedia.org/
Chercher dans les documents sous licence Creative Commons:
http://search.yahoo.com/cc