Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1826 connectés 

  FORUM HardWare.fr
  Programmation
  Perl

  expression reguliere,recuperer une valeur

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

expression reguliere,recuperer une valeur

n°1498619
donny3
Posté le 04-01-2007 à 11:01:31  profilanswer
 

salut,
 
Dans un fichier je recupere une ligne
et dans la ligne recuperer je souhaiterai recuperer une valeur,
pour comprendre voila :
 
Je recupere $x et à partir de cette ligne, je ne souhaite conserver que le nom du fichier;
donc j'ai fait cela mais apparament ça ne fonctionne pas, car il me retourne la ligne complete au lieu de seulement
essai.sh

Code :
  1. my $x = 'FILE="essai.sh" SIZE="32"';
  2. $x    =~ s/^FILE="(\w+)" SIZE$/$1/;
  3.     print "Nom du fichier =   $x\n";


 
Merci

mood
Publicité
Posté le 04-01-2007 à 11:01:31  profilanswer
 

n°1498622
franceso
Posté le 04-01-2007 à 11:13:22  profilanswer
 

Déjà, ça marche pas à cause de ta regexp qui impose que SIZE soit à la fin de la ligne. Sinon, pour détecter ce genre d'erreurs, tu devrais tester si la regexp a matché ou pas. Perso, je ferais plutôt comme ça :

Code :
  1. my $x = 'FILE="essai.sh" SIZE="32"';
  2. if ($x =~ /^FILE="(\w+)" SIZE="(\d+)"$/)
  3. {
  4.   print "Nom du fichier = $1\n";
  5.   print "Taille du fichier = $2\n";
  6. }
  7. else
  8. {
  9.   print STDERR "Mauvais format de ligne: `$x'\n";
  10. }


---------------
TriScale innov
n°1498623
donny3
Posté le 04-01-2007 à 11:24:06  profilanswer
 

j'ai tester ton code
et j'ai cela

Citation :


Mauvais format de ligne: `FILE="essai.sh" SIZE="32"'

n°1498628
franceso
Posté le 04-01-2007 à 11:38:09  profilanswer
 

ouais, il y avait une autre erreur dans la regexp : \w ne permet pas de matcher le caractère '.'
 
Comme ça, ça marche :

Code :
  1. #! /usr/bin/perl
  2. use strict;
  3. my $x = 'FILE="essai.sh" SIZE="32"';
  4. if ($x =~ /^FILE="([^\"]+)" SIZE="(\d+)"$/)
  5. {
  6.     print "Nom du fichier = $1\n";
  7.     print "Taille du fichier = $2\n";
  8. }
  9. else
  10. {
  11.     print STDERR "Mauvais format de ligne: `$x'\n";
  12. }


---------------
TriScale innov
n°1498909
donny3
Posté le 04-01-2007 à 15:28:31  profilanswer
 

j'ai modifié le $x et le code
et ça plante maintenant

Code :
  1. my $x = '<PROCESS FILE="essai".sh" SIZE="32" SYSTEM="32Bit">';
  2. if ($x =~ /FILE="([^\"]+)" SIZE="(\d+)"$/)
  3. {   
  4. print "Nom du fichier = $1\n";   
  5. print "Taille du fichier = $2\n";
  6. }else
  7. {   
  8. print STDERR "Mauvais format de ligne: `$x'\n";
  9. }


 
est ce que c'est à cause de cette partie qui dit que $1 doit être egal à une chaine qui commence et fini par un "
FILE="([^\"]+)"

n°1498934
franceso
Posté le 04-01-2007 à 16:18:09  profilanswer
 

C'est la même erreur qu'au début : à cause du $ terminal, ta regexp ne matche que si "SIZE=??" se trouve à la fin de la ligne, ce qui n'est pas le cas puisque tu as ajouté le champ SYSTEM

 

modifie ta regexp pour la rendre plus souple. Il faut qu'elle accepte tous les types de lignes valides possibles, sans pour autant matcher n'importe quoi. Par exemple tu pourrais assouplir ta regexp comme ça:

/FILE="([^\"]+)"\s+SIZE="(\d+)"/



Message édité par franceso le 04-01-2007 à 16:18:23

---------------
TriScale innov
n°1498960
donny3
Posté le 04-01-2007 à 17:07:40  profilanswer
 

si quelqu'un aurait un tutos sur les expression reguliere, mieuw que celui que j'ai hesité pas

n°1499140
Elmoricq
Modérateur
Posté le 05-01-2007 à 08:58:00  profilanswer
 

donny3 a écrit :

si quelqu'un aurait un tutos sur les expression reguliere, mieuw que celui que j'ai hesité pas


 
Rien ne vaut la documentation officielle :  
http://perldoc.perl.org/perlre.html
 
Et pour faciliter les tests, il y a ce site qui permet de tester ses expressions régulières, ça simplifie la vie :  
http://www.regextester.com
 
[:dawa]

n°1499145
anapajari
s/travail/glanding on hfr/gs;
Posté le 05-01-2007 à 09:31:46  profilanswer
 

et perso je rajouterais ce petit cheat sheet pour les trous de mémoire

n°1499158
Elmoricq
Modérateur
Posté le 05-01-2007 à 10:01:53  profilanswer
 

Le nom du site [:god]

mood
Publicité
Posté le 05-01-2007 à 10:01:53  profilanswer
 

n°1499395
donny3
Posté le 05-01-2007 à 15:52:49  profilanswer
 

Merci pour les liens
c'est quoi l'interet de se site
http://www.regextester.com  

n°1499400
Elmoricq
Modérateur
Posté le 05-01-2007 à 16:00:22  profilanswer
 

L'intérêt ?
Tu colles une regexp dans la case regexp, un texte sur lequel appliquer la regexp, dans la case texte, tu choisis le type d'expression à appliquer (pour PERL c'est Preg), tu choisis des options, et tu zieutes si ta regexp fonctionne bien comme tu veux.
 
Quand c'est pour vérifier des regexp qui ne s'enclenchent que lorsque des conditions précises sont résolues dans le programme, c'est pratique.

n°1500691
Pablo Escr​obarbe
Retour d'exil
Posté le 09-01-2007 à 11:00:30  profilanswer
 

Merci pour le site http://www.regextester.com , je connaissais pas et c'est bien pratique.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Perl

  expression reguliere,recuperer une valeur

 

Sujets relatifs
VBA : WorkSheet_Change, première valeur avt modificationmasqué une valeur à l'affichage
[Perl] Récupérer valeur d'un programme Perl dans un batchcomment tricher dans un FORM grace au PHP ??? envoi d'une valeur ?
valeur par defaut dans une combobox en htmlACCESS : Ajouter une valeur au début d'une liste déroulante
recuperer l'id auto_incremente du next enregistrement à insrererRécupérer le code VBA d'un formulaire Access
Plus de sujets relatifs à : expression reguliere,recuperer une valeur


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR