Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 2 sur 2
  1. #1
    Nouveau Membre du Club
    Inscrit en
    mars 2006
    Messages
    553
    Détails du profil
    Informations forums :
    Inscription : mars 2006
    Messages : 553
    Points : 33
    Points
    33

    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


    my $toto="12423.22";
    $toto =~ s/[\.\,]//g;
    merci d'avance

  2. #2
    Expert Confirmé

    Homme Profil pro Laurent R.
    Conseil - Consultant en systèmes d'information
    Inscrit en
    mai 2012
    Messages
    1 238
    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 : 1 238
    Points : 2 678
    Points
    2 678

    Par défaut

    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.
    Mes articles sur La programmation fonctionnelle en Perl publiés sur ce site:

    ________
    Sauf mention contraire explicite, les bouts de code que je poste en réponse à une question n'ont pas forcément été testés.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •