Bonjour,
Je suis en train de développer un script permettant de comparer deux fichiers et de renvoyer le résultat de cette comparaison dans un fichier résultat.
Voilà le code (je skip tout ce qui est librairies, déclarations des variables etc le problème n'est pas ici) :
Admettons que mon fichier de référence contienne :
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 open(FILER,$fichierReference); open(FILEV,$fichierVerif) or die "Erreur !!\n"; open(FILEC,">resultat_comparaison.txt") or die ("Erreur d'ouverture du fichier\n"); #################################### # Comparaison des fichiers # #################################### while (<FILER>) { chomp; #next unless /\w/; #or $_ =~ /<rep:TimeStamp>.*<\/rep:TimeStamp>/; # élimine les lignes vides #next if /<rep:TimeStamp>/; #if ($_ =~ m/^[a-z]{3}\d+\,([.*]\,[.*]\,[.*])$/) { if ($_ =~ m/^.*201[5|6]\,(.*)$/) { $lineR = $1; } else { $lineR = $_; } $hash_fic1{$lineR} = 1; } while (<FILEV>) { chomp; #next unless /\w/;# or $_ =~ /<rep:TimeStamp>/; #next if /<rep:TimeStamp>/; if ($_ =~ m/^.*[0-9]{4}\,(.*)$/) { $lineV = $1; } else { $lineV = $_; } print $lineV."\n"; if (exists $hash_fic1{$lineV}) { $hash_fic1{$lineV} ++; } else { print FILEC "Ligne différente (fic 2) : $lineV\n"; } } for my $cle (keys %hash_fic1) { print FILEC "Ligne non présente dans le fichier de à vérifier : $cle\n" if $hash_fic1{$cle} < 2; } close(FILER); close(FILEV); close(FILEC);
Et que mon deuxième fichier contienne :Mon Nov 02 10:55:22 CET 2015, aa
Mon Nov 02 10:55:22 CET 2015, bb
Mon Nov 02 10:55:22 CET 2015, cc
Mon Nov 02 10:55:22 CET 2015, dd
Mon Nov 02 10:55:22 CET 2015, dd
Mon Nov 02 10:55:22 CET 2015, ee
Mon Nov 02 10:55:22 CET 2015, ff
Il manque un dd et le ff. Avec le code ci-dessus, dans le fichier résultat, j'aurais une ligne indiquant qu'il manque la ligne ff.Mon Nov 02 10:55:22 CET 2015, aa
Mon Nov 02 10:55:22 CET 2015, bb
Mon Nov 02 10:55:22 CET 2015, cc
Mon Nov 02 10:55:22 CET 2015, dd
Mon Nov 02 10:55:22 CET 2015, ee
Cependant, comme la ligne dd est présente une fois dans le fichier vérif il ne m'affiche pas qu'il manque une ligne dd.
Savez-vous comment pourrais-je faire pour prendre en compte ce problème ?
Merci d'avance,
Cdlt
Partager