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 :

substituion dernier caractère


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2003
    Messages : 19
    Par défaut substituion dernier caractère
    Bonjour,


    je voudrais substituer le dernier caractère numérique par un autre caractère numérique.

    exemple 761,764,768 par 760


    Merci d'avance

  2. #2
    Membre Expert
    Avatar de Woufeil
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 1 076
    Par défaut
    Bonjour !

    Hum, avec les regex ça ne pose pas trop de problème ! Je pense que ceci devrait faire l'affaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    my $var = "761,764,768";
    $var =~ s/\d+$/760/;

    Bonne prog

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2003
    Messages : 19
    Par défaut
    Merci pour ton aide

    mais c'est pas forcément que ces trois la cela devra s'appliquer pour plusieurs centaines de variables, c'est seulement le dernier caractère et mettre 0 à la place.


    merci d'avance.

  4. #4
    Membre expérimenté
    Avatar de GLDavid
    Homme Profil pro
    Head of Service Delivery
    Inscrit en
    Janvier 2003
    Messages
    2 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Head of Service Delivery
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 896
    Par défaut
    Hello

    Dans ce cas, je reprend le code de l'excellent Woufeil:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    #!/usr/bin/perl -w
    use strict;
     
    my $var = "761,764,768";
    $var =~ s/\d$/0/;
    print $var;
    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code :tagcode: ni le tag :resolu:

    Je ne répond à aucune question technique par MP.

  5. #5
    Membre Expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Par défaut
    Voire mieux encore ... depuis que Jedaï, dans un autre fil, m'a rappelé la classe de correspondance \b (limite de mots) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #!/usr/bin/perl -w
    use strict;
     
    my $var = "761,764,768";
    $var =~ s/\d\b/0/g;
    print $var;
    Ainsi, on remplace le dernier chiffre (en bordure de mot) par un zero, et on le fait dans toute l'expression (option g de la substitution).

    Par contre, on peut vouloir ne pas substituer un chiffre isolé ... dans ce cas, c'est plus complexe ... Ceci peut fonctionner, par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #!/usr/bin/perl -w
    use strict;
     
    my $var = "761,764,768";
    $var =~ s/\B\d\b/0/g;
    print $var;

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2003
    Messages : 19
    Par défaut
    J'ai trouver merci a tous.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $c=0;
    chop($a);
    $b = $a . $c;
    Mais je ne sais si ce code est lourd, vu que je l'apelle régulièrement et je ne
    sais pas combien consomme cet fonction.

  7. #7
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    La seule façon d'être sûr du coût respectif des différentes solutions dans un langage d'aussi haut niveau que Perl est de faire un benchmark, voici donc le résultat de ce test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    #!/usr/bin/perl
    use strict; use warnings;
     
    use Benchmark qw(cmpthese);
     
    my $str = "761,764,768";
     
    cmpthese( -5, { SUBSTR => sub{ substr $str, (length($str) - 2), 1, "0"},
      CHOP =>  sub{ chop($str); $str .= "0";},
      REGEX => sub{ $str =~ s/.$/0/;}  } );
    Au final le chop() (légèrement amélioré néanmoins, je doute que ce soit le cas avec la version naïve proposée) gagne assez légèrement (37% d'amélioration par rapport au second). Néanmoins cela est très négligeable car toutes les solutions sont au-dessus des 2 millions d'itérations par secondes (sur mon ordinateur).

    --
    Jedaï

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2003
    Messages : 19
    Par défaut
    Merci Jedaï



    [resolu]
    je ne voulais pas me lancer dans des tests de benchmarks vu que cela change de config
    en config.[/resolu]

  9. #9
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    Citation Envoyé par reolik
    Merci Jedaï



    [resolu]
    je ne voulais pas me lancer dans des tests de benchmarks vu que cela change de config
    en config.[/resolu]
    Pas tant que ça (du moins le rapport entre les diverses solutions, pour le rendement évidemment c'est une autre histoire...), et puis avec Benchmark, c'est tellement facile d'en écrire un en 3 minutes.

    --
    Jedaï

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2003
    Messages : 19
    Par défaut
    oue tout a fait

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Prendre les 3 derniers caractères
    Par Boolean69 dans le forum Access
    Réponses: 9
    Dernier message: 07/06/2006, 15h27
  2. [Tableaux] Suppresion du dernier caractère d'une chaine
    Par GarGamel55 dans le forum Langage
    Réponses: 15
    Dernier message: 19/02/2006, 22h27
  3. Dernier caractère d'un char
    Par mindwind dans le forum Langage SQL
    Réponses: 3
    Dernier message: 01/12/2005, 13h57
  4. débarrasser un string de son dernier caractère ?
    Par fakinou dans le forum Langage
    Réponses: 27
    Dernier message: 28/09/2005, 21h58
  5. [ORDER BY]tri sur le dernier caractère d'un champ
    Par Tan dans le forum Langage SQL
    Réponses: 3
    Dernier message: 03/05/2004, 14h39

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