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
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
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![]()
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.
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.
Voire mieux encore ... depuis que Jedaï, dans un autre fil, m'a rappelé la classe de correspondance \b (limite de mots) :
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).
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;
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;
J'ai trouver merci a tous.
Mais je ne sais si ce code est lourd, vu que je l'apelle régulièrement et je ne
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 $c=0; chop($a); $b = $a . $c;
sais pas combien consomme cet fonction.
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 :
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).
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/;} } );
--
Jedaï
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.Envoyé par reolik
![]()
--
Jedaï
Partager