Bonjour à tous,
j'ai un problème relatif à l'utilisation des regexp dans Perl, plus précisément, concernant la récupération des valeurs de retour.
Je cherche à créer une expression régulière permettant de recueillir dans un tableau toutes les occurrences d'un même pattern dans chaque ligne d'un fichier texte multiligne.
Le format de mon fichier est du genre :
texte1/ttexte2/t("item1","item2")/t("item3","item1","item4","item5")/ttexte3/ttexte4/ttexte5/t("item2","item6")
texte6/t("item7","item8")/t("item9","item10")/ttexte8
etc
etc...
C'est donc une table de ligne (finies par /n) , contenant divers élément de texte séparés par des tabulations SAUF certains groupes de texte repérés par ("item1", ... ,"item n")
Ma requête semblera sûrement simple à beaucoup, mais je n'y arrive pas personnellement. Si vous aviez quelques suggestions, ce sera avec plaisir !
De mon côté j'ai essayé ceci, mais sans succès...
C'est au niveau de la ligne 10 que je cale. Les groupes d'items ne contenant qu'un caractère ne sont pas récupérés (pourtant je ne vois pas où mettre le fameux + pour mieux quantifier mon pattern...), et je ne récupère qu'un élément dans le meilleur des cas. Par exemple, si je fourni la ligne suivante dans mon fichier table_test.csv :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 my @formats_spec; open(FIC, "table_test.csv") || die("pas de fichier table_test !\n"); my $ligne=<FIC>; chomp($ligne); my @data = split('\t',$ligne); $nb_item = @data; for (my $i=0; $i<$nb_item; $i++) { if ($data[$i] =~ m/^\(".+"\)$/) { @formats_spec = ( $data[$i] =~ m/[\(,](".[^"]+")+[,\)]/ ); print "$i => ". join(' - ',@formats_spec) ."\n"; } }
TEXT TEXT ("Y","N") ("Y","N") ("Y","N") ("EXP_only","CGH_only","both_EXP/CGH") ("MSI","MSS") ("Lynch","Sporadique","MSS","Doubt") TEXT NUMERIC ("wt","mut","doubt") ("wt","mut","doubt") ("wt","mut","doubt")
je n'obtiens que la sortie suivante :
2 =>
3 =>
4 =>
5 => "EXP_only"
6 => "MSI"
7 => "Lynch"
10 => "wt"
11 => "wt"
12 => "wt"
Quelqu'un oit il où est le "bug" ??
Merci d'avance pour votre aide précieuse.
Bonne journée à tous.
Partager