Bonjour à tous !!!
Voilà, j'ai un fichier dans lequel je dois séparer des blocs de lignes en fonction de plusieurs critères.
Il y a deux type de bloque concaténer dans deux fichiers respectifs.
Les règles sont les suivantes:
Pour déterminer les blocs qui iront dans le fichier 1:
- Le bloc commence toujours par UNB+UNOA
- Le bloc se termine toujours par UNZ+
Pour déterminer les blocs qui iront dans le fichier 2:
- Le bloc commence toujours par STX=ANA
- Le bloc se termine par END= suivi d'un chiffre (0 à 9)
J'ai fait le script suivant pour résliser cela mais ça n'as pas l'aire de fonctionner toujours. ça à l'air de venir de la détermination du bloc 2.
Pouvez vous jeter un petit coups d'oeil expert et me dire ce qui ne va pas ???
Merci beaucoup pour vos réponses, c'est pour mon boulot et je dois le corriger avant de partie en vacances (demain ;o((((( )
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97 #!c:\perl\bin\perl.exe $fic_in='c:\wsta\m-sga400.r'; $fic_out_edifact='c:\wsta\m-atlas.r'; $fic_out_tradacom='c:\wsta\m-sga400.r2'; $Tradacom_entete='STX=ANA'; $Edifact_entete='UNB\+UNOA'; $Tradacom_end='END=[0-9]\''; $Edifact_end='UNZ\+'; $nb_tradacom=0; $nb_edifact=0; open(fic,$fic_in) or die "Impossible d'ouvrir $fic_in\n$!\n"; @file=<fic>; close(fic); &SearchTradacom(); &WriteTradacom(); &SearchEdifact(); &WriteEdifact(); print "* $nb_tradacom commandes tradacom trouvees\n* $nb_edifact commandes edifact trouvees\n* Job Done \1\1\n"; sub WriteTradacom() { print "---Tradacom---\n"; open(fic,">$fic_out_tradacom") or die "Impossible d'ouvrir $fic_out_tradacom\n$!\n"; for(my $i=0;$i<=$#Tradacom;$i++) { print "$i. $Tradacom[$i]{'debut_tradacom'} --- $Tradacom[$i]{'fin_tradacom'}\n"; for(my $j=$Tradacom[$i]{'debut_tradacom'};$j<=$Tradacom[$i]{'fin_tradacom'};$j++) { print fic "$file[$j]"; } } close(fic); } sub WriteEdifact() { print "---Edifact---\n"; open(fic,">>$fic_out_edifact") or die "Impossible d'ouvrir $fic_out_edifact\n$!\n"; for(my $i=0;$i<=$#Edifact;$i++) { print "$i. $Edifact[$i]{'debut_edifact'} --- $Edifact[$i]{'fin_edifact'}\n"; for(my $j=$Edifact[$i]{'debut_edifact'};$j<=$Edifact[$i]{'fin_edifact'};$j++) { print fic "$file[$j]"; } } close(fic); } sub SearchTradacom() { for (my $i=0;$i<=$#file;$i++) { if($file[$i]=~/$Tradacom_entete/) { $debut=$i; for(my $j=$i;!($file[$j]=~/$Tradacom_end/)&&$j<$#file;$j++) { $fin=$j; } $Tradacom[$nb_tradacom]{'debut_tradacom'}=$debut; $Tradacom[$nb_tradacom]{'fin_tradacom'}=$fin+1; $nb_tradacom++; } } } sub SearchEdifact() { for (my $i=0;$i<=$#file;$i++) { if($file[$i]=~/$Edifact_entete/) { $debut=$i; for(my $j=$i;!($file[$j]=~/$Edifact_end/)&&$j<$#file;$j++) { $fin=$j; } $Edifact[$nb_edifact]{'debut_edifact'}=$debut; $Edifact[$nb_edifact]{'fin_edifact'}=$fin+1; $nb_edifact++; } } print "\nfin\n"; }
Bonne journée,
Guillaume.
Partager