recuperer des lignes d'un txt selonune condition

recuperer des lignes d'un txt selonune condition - Perl - Programmation

Marsh Posté le 15-05-2009 à 11:15:36    

Bonjour a tous,
 
je souhaite ouvrir un fichier txt, copier la premiere ligne dans un nouveau document txt puis parcourir chaque ligne et la copier entierement dans le nouveau fichier si le deuxième mot correspond à un choix préétabli. En fait c'est un fichier de données (opur faire des stats) que j'ai mais tout ne m'est pas utile; en colonne on a les variables et en lignes les "individus"; le but est de récupérer tout les individus pour qui vérifie une valeur de la deuxieme variable (de type charactere)
 
Il est possible que Perl ne soit pas le langage le plus adapté pour répondre à mon probleme, je pense notament au langage Awk mais je ne le connais pas très bien pour l'instant.
 
!#/usr/bin/perl -w
 
open(F, "chemin-fichier-a-lire" ) || die("erreur à l'ouverture" );
open(G, ">chemin-fichier-a-ecrire" ) || die("erreur à l'ouverture 2" );
print G (<F> );  # copie de la premiere ligne
 
while(<F> ){    # tant q'uil y a des lignes
$var=$_;
if($var =~ ^/[a-zA-Z0-9]*/\s/motchoisi){              # si le deuxieme mot == "motchoisi"
print G ($_);   # ecriture de la ligne dans nouveau fichier
}
 
close(F);
close(G);

 
Mon probleme reside dans l'expression réguliere a mettre dans le if(), je pense que ça marche mais j'aimerai une confirmation voir, si ça ne marche pas, une rectif.
 
Aussi la je dois creer le nouveau fichier avant de lancer le script, y-a-t'il moyen de le creer automatiquement?
 
Merci par avance
 
 
[edit] est-ce qu'une fonction permettant de repérer une chaine précise dans une ligne existe? du type dispatch()


Message édité par Bijnok le 15-05-2009 à 13:54:35
Reply

Marsh Posté le 15-05-2009 à 11:15:36   

Reply

Marsh Posté le 17-05-2009 à 15:24:38    

Il y a des erreurs dans ce que tu as ecrit, la ou tu mets les /
L'expression régulière que tu cherches devrait être du style:
/^\w+\s+motchoisi\s+/
^ -> début de ligne
\w+ -> un mot
\s+ -> un ou plusieurs blancs
 
A+,


Message édité par gilou le 17-05-2009 à 16:10:10

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

Marsh Posté le 17-05-2009 à 16:24:08    

Un exemple de solution possible
 

Code :
  1. #!/usr/bin/perl
  2. #
  3. use warnings;
  4. use strict;
  5.  
  6. open my $FIN,  '<', 'input.txt'  or die "erreur 1 a l'ouverture";
  7. open my $FOUT, '>', 'output.txt' or die "erreur 2 a l'ouverture";
  8. print $FOUT ($_ = <$FIN> );
  9. print $FOUT (grep /^\w+\s+motchoisi\s+/o, <$FIN> );
  10. close $FIN;
  11. close $FOUT;


Citation :

est-ce qu'une fonction permettant de repérer une chaine précise dans une ligne existe?

Comme précédemment, avec la chaine cherchée dans le grep (et une regexp ad hoc si on a des restrictions contextuelles, comme par exemple le fait que la chaine soit un mot, ou on utiliserait \bchaine\b)
 
Le script de l'exemple marche sauf si le fichier en entrée est vide (a tester avant et decider de ce qu'on fait: une erreur ou bien un fichier de sortie vide).
A+,


Message édité par gilou le 17-05-2009 à 17:02:58

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

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed