Précédent   Forum du club des développeurs et IT Pro > Autres langages > Perl > Modules
Modules Toutes vos questions sur l'utilisation, l'installation, la création de modules Perl sous Windows/Linux/Unix/MacOS. Avant de poster, veuillez consulter les FAQs perl, les cours Perl 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 29/10/2012, 11h41   #1
inserm
Invité de passage
 
Inscription : septembre 2012
Messages : 10
Détails du profil
Informations forums :
Inscription : septembre 2012
Messages : 10
Points : 1
Points : 1
Par défaut parser une valeur

Bonjour,

voilà le script

Code :
1
2
3
4
5
6
#!/usr/bin/perl
 
my $value='220150250';
 
$value=~ m/(\d{8})\d{6}/;
   print "$value\n";
Je veux afficher les trois premier chiffre à gauche : 22.0

Merci.
inserm est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/10/2012, 13h05   #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
Tu peux faire cela avec une regex:

Code :
print "$1\n" if $value =~ /^\d{3}/;
Si tu es sûr qu'il n'y a que des chiffres, la fonction substr sera sans doute un peu plus performante.
__________________
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 déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/10/2012, 14h32   #3
inserm
Invité de passage
 
Inscription : septembre 2012
Messages : 10
Détails du profil
Informations forums :
Inscription : septembre 2012
Messages : 10
Points : 1
Points : 1
Citation:
Envoyé par Lolo78 Voir le message
Tu peux faire cela avec une regex:

Code :
print "$1\n" if $value =~ /^\d{3}/;
Si tu es sûr qu'il n'y a que des chiffres, la fonction substr sera sans doute un peu plus performante.


Merci
J'ai trouvé en rajoutant deux lignes:
Code :
1
2
3
4
 
$value = substr($value,0,3);
$value =~ s/^(\d+)(\d)$/$1.$2/;
print "$value\n";
inserm est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/10/2012, 15h11   #4
Philou67430
Expert Confirmé
 
Inscription : avril 2009
Messages : 2 678
Détails du profil
Informations personnelles :
Âge : 47

Informations forums :
Inscription : avril 2009
Messages : 2 678
Points : 3 152
Points : 3 152
Tu peux aussi le faire en une seule ligne :

Code :
$value =~ s/^(\d+)(\d).*$/$1.$2/;
__________________
Plus j'apprends, et plus je mesure mon ignorance (philou67430)
Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
Using strict and warnings is good for you.
Philou67430 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/10/2012, 19h39   #5
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
Ah, tu veux ajouter un point entre le second et le troisième chiffre? Je n'avais pas compris ça.

Dans ce cas, oublie substr et utilise directement une substitution dans une expression régulière:

Code :
$value =~ s/^(\d){2}(\d)/$1.$2/;
__________________
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 déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 10h35.


 
 
 
 
Partenaires

Hébergement Web