recuperer des lignes d'un txt selonune condition - Perl - Programmation
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+,
Marsh Posté le 17-05-2009 à 16:24:08
Un exemple de solution possible
Code : |
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+,
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