Précédent   Forum du club des développeurs et IT Pro > Autres langages > Perl > Langage
Langage Toutes vos questions sur les scripts Perl en général. Avant de poster, veuillez consulter les FAQs perl, les cours Perl, les critiques de livres et les sources Perl.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 02/12/2012, 21h48   #1
vince2005
Nouveau Membre du Club
 
Inscription : mars 2006
Messages : 515
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 515
Points : 32
Points : 32
Par défaut tranformation de chaine numérique

Bonjour,

J'ai une chaine numérique qui correspond à un montant. De ce montant, je dois d'abord supprimer les "," ou "." correspondant au décimal.

En suite, je dois réaliser une action pour que cette variable fasse 20 caractéres, en mettant des "0" devant mon montant
exemple :
00000000000001242322

En sachant que ce montant est variable, comme puis je faire pour retrouver avec le bon nombre de "0"0


Citation:
my $toto="12423.22";
$toto =~ s/[\.\,]//g;
merci d'avance
vince2005 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/12/2012, 00h34   #2
Lolo78
Membre Expert
 
Homme Laurent R.
Conseil - Consultant en systèmes d'information
Inscription : mai 2012
Messages : 588
Détails du profil
Informations personnelles :
Nom : Homme Laurent R.
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Conseil - Consultant en systèmes d'information
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mai 2012
Messages : 588
Points : 1 152
Points : 1 152
La virgule n'étant pas un caractère spécial pour les expression régulières, il n'y a pas besoin de la précéder d'un caractère d'échappement. Donc:

Code :
1
2
my $toto="12423.22";
$toto =~ s/[\.,]//g;
ou, peut-être plus simplement:
Code :
1
2
my $toto="12423.22";
$toto = 100 * $toto
Cela fait, tu obtiens 1242322, tu comptes le nombre de caractères de ton nombre et ajoute en tête le nombre de 0 nécessaires pour obtenir 20 caractères.

$toto = '0' x (20 - len($toto)) . $toto;



Ou, beaucoup mieux en principe, tu utilises l'une des trois fonctions suivantes qui servent à ce genre de formatage: pack, sprintf (voire directement printf) ou format ... Sauf que leur syntaxe n'est pas toujours du gâteau.

Un exemple qui devait t'aider avec sprintf:

Code :
1
2
3
my $toto="12,423.22";
$toto =~ s/[\.,]//g; # toto vaut maintenant 1242322
$toto = sprintf  "%020d", $toto; # $toto vaut maintenant 00000000000001242322
Le format "%020d" utilisé par sprintf déclare que l'on veut formater le nombre passé en paramètre ($toto) comme un entier signé sur 20 caractères, remplis à gauche avec des 0.

C'est l'idée. A ajuster éventuellement si le nombre peut être négatif. Si $toto vaut -1242322 avant le sprintf, il deviendra -0000000000001242322 (donc un zéro de moins pour permettre le signe -, le tout restant sur 20 caractères), ce qui est sans doute ce que tu recherches, mais à confirmer.
__________________
Sauf mention contraire explicite, les bouts de code que je poste en réponse à une question n'ont pas forcément été testés.
Lolo78 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 08h37.


 
 
 
 
Partenaires

Hébergement Web