Bonjour à tous,

J'ai deux fichiers ABE et ACAD.
ABE est composé de 2 champs de 11 caractères séparés par un ";". Je désire enrichir ACAD en le complétant avec le champ 2 de ABE, si le champ 1 de ABE est présent dans ACAD, en redirigeant dans un un fichier DEST1.

J'ai commencé le programme, mais je n'obtiens rien en sortie et les erreurs suivantes :

Filehandle DEST1 opened only for input at ACADD.pl line 42, <ABEFile> line 11758.
Filehandle DEST1 opened only for input at ACADD.pl line 42, <ABEFile> line 11759.
Filehandle DEST1 opened only for input at ACADD.pl line 42, <ABEFile> line 11760.
Filehandle DEST1 opened only for input at ACADD.pl line 42, <ABEFile> line 11761.
Filehandle DEST1 opened only for input at ACADD.pl line 42, <ABEFile> line 11762.
Filehandle DEST1 opened only for input at ACADD.pl line 42, <ABEFile> line 11763.
Filehandle DEST1 opened only for input at ACADD.pl line 42, <ABEFile> line 11764.
Filehandle DEST1 opened only for input at ACADD.pl line 42, <ABEFile> line 11765.
Filehandle DEST1 opened only for input at ACADD.pl line 42, <ABEFile> line 11766.
Filehandle DEST1 opened only for input at ACADD.pl line 42, <ABEFile> line 11767.
Filehandle DEST1 opened only for input at ACADD.pl line 42, <ABEFile> line 11768.


Voici le code :
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
 
#!/usr/local/bin/perl
 
use strict;
use warnings;
 
my $ABEFile = $ARGV[0];
my $ACADFile = $ARGV[1];
my $VSACAD = $ARGV[2];
 
my $LigneABE;
my $LigneACAD;
 
#Ligne ACAD
my $TexteRecup = "";
 
if(!$ARGV[0] || !$ARGV[1] || !$ARGV[2] )
{
 die "Utilisation : \n perl acadd.pl nom_fichier_abe nom_fichier_acad nom_fichier_resultat\n";
}
else
{
 
open (ABEFile,"$ABEFile") or die "Impossible d'ouvrir le fichier ABE\n";
open (ACADFile,"$ACADFile") or die "Impossible d'ouvrir le fichier ACAD\n";
#Fichier ACADD résultant
open (DEST1, "$VSACAD") or die "Impossible d'ouvrir le fichier de sortie\n";
 
# lecture du fichier ACAD ligne par ligne
while ($LigneACAD = <ACADFile>)
{
	while( $LigneABE=<ABEFile> )
	{
	   my @ABE = split(/;/, $LigneABE);
	   if( $LigneACAD =~ /$ABE[0]/ )
	   {
                $TexteRecup = $LigneACAD.$ABE[1];
                print DEST1 $TexteRecup;
                }
                else
                {
                $TexteRecup = $LigneACAD;
                print DEST1 $TexteRecup;
               }
	}
}
 
close(ACADFile);
close(ABEFile);
close(DEST1);
}
Merci pour votre aide.