IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Perl Discussion :

tranformation de chaine numérique


Sujet :

Langage Perl

  1. #1
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    624
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 624
    Points : 69
    Points
    69
    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
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 : 3 612
    Points : 12 469
    Points
    12 469
    Billets dans le blog
    1
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    my $toto="12423.22";
    $toto =~ s/[\.,]//g;
    ou, peut-être plus simplement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

Discussions similaires

  1. Formater une chaine "numérique"
    Par soso78 dans le forum VB.NET
    Réponses: 3
    Dernier message: 02/01/2009, 20h44
  2. Extraction de chaines numériques d'un VARCHAR
    Par Tententai dans le forum SQL
    Réponses: 16
    Dernier message: 25/07/2007, 18h04
  3. Fonction pour une chaine numérique
    Par miya dans le forum VB.NET
    Réponses: 5
    Dernier message: 10/05/2007, 15h21
  4. conversion une chaine numérique en lettre
    Par nazimb dans le forum ASP
    Réponses: 1
    Dernier message: 20/11/2005, 18h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo