Bonjour à tous,
j'ai un petit souci avec une regex.
J'ai un fichier qui comprend des blocs de données.
Je récupère toutes les données du fichier dans un tableau, puis dans une variable avec join("",<fic>)
De là, j'utilise une regex (merci djibril pour l'explication il y a quelques temps afin de dissocier mes blocs de commandes dans un tableau.
Je fais ainsi:
Jusque là, pas de problème ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 open(fic,$RepEnvoi.$FileToSend) or die "Grave erreur. Ouverture $RepEnvoi$FileToSend impossible $!\n"; $my_lines=join("",<fic>); close(fic); my @BLOCS=$my_lines=~/^(EDI_DC40.+?EDI_DC40.+?$)/msg;
Mais ensuite, pour chacun des éléments du tableau @BLOCS, je veux faire une autre regexp qui doit vérifier les règles suivantes:
- la ligne commence par $Segment
- puis, il y a 40 (et 40 uniquement) espaces
- puis, il y a 15 fois n'importe quel caractère
- puis, il y a $Segment_qualifier
Si le motif est trouvé, on prend les 35 premiers caractères du sous ensemble après le motif ( $' )
J'ai donc fait la regexp suivante:
Donc, il y a visiblement un gros problème dans ma 2nde regexp.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 for(my $i=0;$i<=$#BLOCS;$i++) { if($BLOCS[$i]=~/^($Segment)\s{40}.{15}$Segment_qualifier/mg); { print "SS ensemble après: ".substr($',0,35)."\n"; } } Je traite $BLOCS[$i] ainsi: - m : pour prendre la chaine comme plusieurs lignes - g : recherche plusieurs fois (même si c'est sur que on trouvera la ligne une et une seule fois
Je pense pas que je n'applique pas les règles d'écriture correctement.
Pouvez vous me filer un coups de pouce la dessus ??
Merci beaucoup !!!
Partager