Bonjour,
J'ai un souci avec une expression régulière.
J'ai un fichier composé de n extraits.
Chaque extrait est un ensemble de plusieurs lignes commençant toujours par :H10:HUB101 et ensuite, on peut avoir n’importe quoi. Il n’y a donc aucun signe distinctif pour indiquer que l’on arrive à la fin de l’extrait tant que l’on n’a pas rencontré le prochain :H10:HUB101 (qui est le début de l’extrait suivant)
Dans l’exemple ci-dessous, on peut donc voir 3 extraits.
:H10:HUB101
:H15:V0002
:H20:H05700809
:H30:080226134
:H61:
:H65:CH03A
:21:VSLA120080200106
7D:SETE GENRLE
F-800 miens
:9:/F630003021100005825
F 800 Saint uveur
:H10:HUB101
:H15:V00S
:H20:H05700810
:H25:SEEEEE
:H30:00226134915
:20:20022600001
:21R:2022600001
:50H/0/35655801
VSL Innational AG
Amouzoka
Neuflrasse 11
302 Bn
:71A:SHA
:H10:HUB101
:H15:V0002
:H20:H05700811
:H25:XXXXX
:H30:00226134915
:20:20022600001
u du ember 91
Je cherche l’expression régulière qui me permettrait de faire une boucle sur chaque extrait du fichier.
Le principal souci, c’est que je n’arrive pas à faire dire à l’expression régulière quelque chose comme
« Reconnais l’extrait composé d’une ligne commençant par :H10:HUB101 et ensuite tout jusqu’au prochain :H10:HUB101 »
La difficulté c’est que le prochain :H10:HUB101 fait partie de l’extrait suivant.
Je pensais à une expression régulière comme :
(^:H10:HUB101.*?(?:(?!^:H10:HUB101)))
Mais cela ne marche pas.
Auriez-vous une idée ?
Voici toujours mon programme Perl
====================
#!/usr/bin/perl
# Effectue une boucle sur chaque extrait HUB101 du fichier filein
use File::Basename;
use strict;
# Initialisation
my $filein=undef;
my $fullfilein=undef;
my $extATrouver=undef;
my $nbExt=0;
undef $/;
$fullfilein = $ARGV[0];
# Ouverture en lecture du fichier 1 pour connaitre les relevés a récupérer
open(FILEIN, $fullfilein) or die "Fichier $fullfilein introuvable";
# lecture du fichier FILEIN
$filein = <FILEIN> ;
# Boucle sur chaque extrait HUB101
while ( $filein =~ m/(^:H10:HUB101.*?(?:(?!^:H10:HUB101)))/smg) {
$extATrouver = $1;
$nbExt++;
print "\nExtrait N° : ".$nbExt."\n";
print $extATrouver;
}
close(FILEIN) or die "Fermeture impossible $fullfilein: $!";;
print "Fin"."\n";
Partager