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

  FORUM HardWare.fr
  Programmation
  Perl

  [RESOLU][PERL] Extraire chaines multiples dans une fichier

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[RESOLU][PERL] Extraire chaines multiples dans une fichier

n°2230214
aa450553
Posté le 08-06-2014 à 21:01:58  profilanswer
 

Bonjour,
 
Je début en Perl et je ne parviens pas à effectuer une opération de routine. Je veux extraire d'un fichier texte toutes les chaines contenus entre deux limiteurs.
 
Le code l'expliquera mieux que moi:

Code :
  1. use strict;
  2. use warnings;
  3. my $content;
  4. my $limiteur_arg1='<strong>';
  5. my $limiteur_arg2='</strong>';
  6. open(TOTO,"test-parsing.html" ) || die ("Erreur d'ouverture de TOTO" ) ;
  7. while (<TOTO> ) {
  8. $content.= $_ ;
  9. }
  10. close(TOTO);
  11. #on enlève les espaces et sauts de lignes
  12. $content =~ s/\n//g;
  13. $content =~ s/\s+//;
  14. my @matched = $content =~ /$limiteur_arg1(.*?)$limiteur_arg2/;
  15. print $matched[0]; # il est bien possible d'extraire une chaine mais comment les extraire toutes ?
  16. open($fh,">>log.txt" ); #on sauvegarde tout dans un fichier
  17. print $fh $matched[0];


 
J'arrive à extraire une chaîne mais le fichier en questions en comporte des centaines. Je n'arrive pas à créer une boucle pour tout extraire intelligemment.
 
Merci d'avance pour votre aide.


Message édité par aa450553 le 08-06-2014 à 23:41:37
mood
Publicité
Posté le 08-06-2014 à 21:01:58  profilanswer
 

n°2230215
dreameddea​th
Posté le 08-06-2014 à 21:11:50  profilanswer
 

il faut que tu fasses une boucle autour du pattern mattching avec la balise g
 

Code :
  1. open($fh,">>log.txt" ); #on sauvegarde tout dans un fichier
  2. while(my @matched = ($content =~ /$limiteur_arg1(.*?)$limiteur_arg2/g)) {
  3.       print $matched[0]; # il est bien possible d'extraire une chaine mais comment les extraire toutes ?
  4.      print $fh $matched[0];
  5. }


 
(mais je n'ai pas testé le code, c'est l'esprit général)


Message édité par dreameddeath le 08-06-2014 à 21:13:14
n°2230216
aa450553
Posté le 08-06-2014 à 21:24:35  profilanswer
 

Merci pour ta réponse.
 
J'obtiens une boucle infinie sur une seule des entrées que je veux extraire. Je ne comprends pas pourquoi. Une idée ?

n°2230217
gilou
Modérateur
Modzilla
Posté le 08-06-2014 à 22:08:07  profilanswer
 

Un truc comme ceci devrait le faire:

Code :
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use autodie;
  5.  
  6. use File::Slurp;
  7. my $content = read_file("test-parsing.html" );
  8.  
  9. #on enlève les espaces et sauts de lignes
  10. $content =~ s/\n|\s+//g;
  11.  
  12. my $limiteur_arg1 = '<strong>';
  13. my $limiteur_arg2 = '</strong>';
  14. my @matched = ($content =~ /$limiteur_arg1(.*?)$limiteur_arg2/g);
  15.  
  16. print join("\n", @matched);


Note: il ne traite pas le cas d'un <strong>...<strong>...</strong>...</strong> imbriqué qui nécessite un traitement plus complexe (il ne s'occupera que du premier niveau)
si tu veux imprimer la liste dans un fichier ouvert dont le handle est $fh, faire:
print $fh "$_\n" foreach (@matched);
 
A+,


Message édité par gilou le 09-06-2014 à 12:23:24

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2230220
aa450553
Posté le 08-06-2014 à 23:39:46  profilanswer
 

Merci Gilou, c'est tout bon.
 
Bonne soirée ++

n°2230240
gilou
Modérateur
Modzilla
Posté le 09-06-2014 à 12:25:04  profilanswer
 

Je viens de voir en le relisant qu'il y avait une fôte de frappeuh:
/)g; au lieu de /g);
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --

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

  [RESOLU][PERL] Extraire chaines multiples dans une fichier

 

Sujets relatifs
C/C et fermer un fichierstring dans un fichier netcdf
comment extraire une page de word, puis la sauvegarder par macro ?fichier xml corrompu balise absente
même fichier .htaccess en prod et developement[PHP] probleme #Ressource #Fichier sur manip image
[BATCH] Génerer un fichier texte et écrire dedans [...][Script Shell] utilisation de la commande tar
Base de données ou fichier de données ?Enregistrer / charger un fichier en C
Plus de sujets relatifs à : [RESOLU][PERL] Extraire chaines multiples dans une fichier


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite) / Groupe LDLC / Shop HFR