Bonjour,

Voilà j'ai un soucis dans la catégorie "comment faire".

Exposer :
Soit un fichier A, structurer comme suit :
CCBPFRPPTRS;CCBPFRP0PAR;
......
CCBPFRPPVER;CCBPFRP0PAR;18707
.....
Et un fichier B, structurer comme suit :
10PSSTFRP0XXXPSSTFRP0XXXPSSTFRP0XXXLA BANQUE POSTALE ...................
......
Il me faut regarder dans B si je trouve le champ1 de A.

Cas1 :
Si oui, alors je compléte la ligne de B par le champ2 et le champ3 de A (Si le champ 3 de A est null, je le met à '00000') comme suit :
Champ3.$LigneB.Champ2
Cas2 :
Si non, alors je modifie la ligne de B comme suit :
"00000".$LigneB."XXXXXXXXXXX"
Cas 3
Si je ne trouve pas A dans B, alors je met la ligne de A dans B comme suit :
Champ3.10.11 Espaces.Champ1.220 Espaces.Champ2
(Note : le "." représente la concaténation)
C'est le cas 3 qui me pose soucis.

Voici le début du programme qui gère le cas 1 et 2.

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
 
#!/usr/local/bin/perl
 
use strict;
use warnings;
 
my $LigneABE;
my $LigneT2DIR;
 
my $Var=0;
my $Space="";
 
my $TexteRecup = "";
 
my $BICABE;
my $BANK;
 
 
if(!$ARGV[0] || !$ARGV[1] || !$ARGV[2]  )
{
 die "Utilisation : \n perl acadd.pl nom_fichier_abe nom_fichier_t2dir nom_fichier_resultat\n";
}
else
{
my $ABEFile = $ARGV[0];
my $T2DIRFile = $ARGV[1];
my $VSACAD = $ARGV[2];
 
#Fichier Traitement Temp
open (DEST1, ">".$VSACAD."");
 
#Lecture du fichier T2Dir ligne par ligne
open (T2DIRFile, "$T2DIRFile") or die "Impossible d'ouvrir le fichier T2Dir\n";
 
while ($LigneT2DIR = <T2DIRFile>)
{
	open (ABEFile,"$ABEFile") or die "Impossible d'ouvrir le fichier ABE\n";
	while( $LigneABE=<ABEFile> )
	{
	   my @ABE = split(/;/, $LigneABE);
	   my $recherche = $ABE[0];
	   if( $LigneT2DIR =~ /$recherche/ )
	   {
                              $Var = 1;
                              $BICABE = $ABE[1];
                              $BANK = $ABE[2];
                              if($BANK eq "")
                             {
                            	$BANK = '00000';
                             }
                             last;
                      }
                    }
                   close(ABEFile);
                   if ($Var == 1) #CAS 1
                  {
                     $LigneT2DIR =~ s/\n//g;
                     $TexteRecup = $BANK.$LigneT2DIR.$BICABE."\n";
                     print DEST1 $TexteRecup;
                     $Var = 0;
                 }
                else #CAS 2
                {
                    $LigneT2DIR =~ s/\n//g;	
                    print DEST1 "00000".$LigneT2DIR."XXXXXXXXXXX\n";
                }
                $TexteRecup ="";
}
close(T2DIRFile);
close(DEST1);
 
}