Bonjour à tous,
Je dois vérifier que mes résultats sont cohérents. Pour se faire j'essaye de parser un fichier csv qui contient mes résultats et je dois vérifers des contraintes (>=, <=) pour vérifier que tout marche bien.

Voilà mon format de fichier :

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
 
FILE1
var1;var2;var3;var4;var5;var6;var7;var8;var9;var10;var11
0.01;0.8;0.6;670;48;108;1218;19.25;20.09;22.79;0.72
0.01;0.95;0.6;255;48;108;1218;18.765;19.41;22.40;0.72
0.01;0.9;0.6;285;48;108;1218;18.815;19.47;21.66;0.67
0.05;0.8;0.6;194;0;12;546;3.285;3.87;4.71;0.41
0.05;0.95;0.6;36;0;12;546;3.455;4.06;5.08;0.30
0.05;0.9;0.6;63;0;12;546;3.332;3.80;4.73;0.42
0.1;0.8;0.6;117;0;12;352;2.876;3.28;4.23;0.34
0.1;0.95;0.6;27;0;12;266;2.643;3.10;3.92;0.39
0.1;0.9;0.6;54;0;12;343;2.732;3.14;4.06;0.34
0.2;0.8;0.6;54;0;12;198;0.72;1.18;1.84;0.13
0.2;0.95;0.6;27;0;12;72;0.677;1.14;1.86;0.14
0.2;0.9;0.6;33;0;12;108;0.755;1.03;1.70;0.11
 
 
 
 
FILE2
var1;var2;var3;var4;var5;var6;var7;var8;var9;var10;var11
0.01;0.8;0.6;150;0;0;0;0.215;0.50;0.92;0.07
0.01;0.95;0.6;96;0;0;0;0.181;0.45;0.77;0.07
0.01;0.9;0.6;129;0;0;0;0.206;0.45;0.80;0.07
0.05;0.8;0.6;150;0;0;0;0.211;0.45;0.82;0.07
0.05;0.95;0.6;96;0;0;0;0.209;0.45;0.81;0.06
0.05;0.9;0.6;129;0;0;0;0.211;0.45;0.78;0.08
0.1;0.8;0.6;150;0;0;0;0.206;0.59;0.95;0.08
0.1;0.95;0.6;96;0;0;0;0.249;0.56;1.01;0.08
0.1;0.9;0.6;129;0;0;0;0.251;0.72;1.15;0.07
0.2;0.8;0.6;129;0;0;39;0.17;0.45;0.78;0.07
0.2;0.95;0.6;85;0;0;21;0.169;0.55;0.85;0.07
0.2;0.9;0.6;112;0;0;21;0.169;0.42;0.77;0.07
Et voilà mon 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
52
53
54
55
56
57
58
59
60
61
62
63
#! /usr/bin/perl
$normal = "/home/lovelace/Bureau/verification/resultats.csv";
 
open(RESULT,"$normal") or die "Unable to open";
my (@var1, @var2, @var3, @var4, @var5, @var6, @var7);
$ct = 1;
while (my $line = <RESULT>){
	if($line =~ /^[0-9.]+;[0-9.]+;[0-9.]+;[0-9.]+;[0-9.]+;[0-9.]+;[0-9.]+;[0-9.]+;[0-9.]+;[0-9.]+;[0-9.]+$/) {
		chomp $line;
		$var1[$ct] = $1 if $line =~ /^([0-9.]+);[0-9.]+;[0-9.]+;[0-9.]+;[0-9.]+;[0-9.]+;[0-9.]+;[0-9.]+;[0-9.]+;[0-9.]+;[0-9.]+$/;
		$var2[$ct] = $1 if $line =~ /^[0-9.]+;([0-9.]+);[0-9.]+;[0-9.]+;[0-9.]+;[0-9.]+;[0-9.]+;[0-9.]+;[0-9.]+;[0-9.]+;[0-9.]+$/;	
		$var3[$ct] = $1 if $line =~ /^[0-9.]+;[0-9.]+;([0-9.]+);[0-9.]+;[0-9.]+;[0-9.]+;[0-9.]+;[0-9.]+;[0-9.]+;[0-9.]+;[0-9.]+$/;
		$var4[$ct] = $1 if $line =~ /^[0-9.]+;[0-9.]+;[0-9.]+;([0-9.]+);[0-9.]+;[0-9.]+;[0-9.]+;[0-9.]+;[0-9.]+;[0-9.]+;[0-9.]+$/;
		$var5[$ct] = $1 if $line =~ /^[0-9.]+;[0-9.]+;[0-9.]+;[0-9.]+;([0-9.]+);[0-9.]+;[0-9.]+;[0-9.]+;[0-9.]+;[0-9.]+;[0-9.]+$/;
		$var6[$ct] = $1 if $line =~ /^[0-9.]+;[0-9.]+;[0-9.]+;[0-9.]+;[0-9.]+;([0-9.]+);[0-9.]+;[0-9.]+;[0-9.]+;[0-9.]+;[0-9.]+$/;
		$var7[$ct] = $1 if $line =~ /^[0-9.]+;[0-9.]+;[0-9.]+;[0-9.]+;[0-9.]+;[0-9.]+;([0-9.]+);[0-9.]+;[0-9.]+;[0-9.]+;[0-9.]+$/;
		$ct++;
	}
}
close RESULT;
$fail = 0;
for ($i=1; $i<$ct && $fail == 0; $i++){
	#print "$var1[$i];$var2[$i];$var3[$i];$var4[$i];$var5[$i];$var6[$i];$var7[$i]\n";
	for ($j=$i+1; $j<$ct && $fail == 0; $j++){
		if(($var1[$i] == $var1[$j]) && ($var2[$i] == $var2[$j])){
			if(($var3[$i]>=$var3[$j]) && (($var4[$i]>$var4[$j]) || ($var5[$i]>$var5[$j]) || ($var6[$i]>$var6[$j]) || ($var7[$i]>$var7[$j]))){
				print "FAIL with 3.1\n";
				$fail = 1;
			}
			if(($var3[$i]<$var3[$j]) && (($var4[$i]<$var4[$j]) || ($var5[$i]<$var5[$j]) || ($var6[$i]<$var6[$j]) || ($var7[$i]<$var7[$j]))){
				print "FAIL with 3.2\n";
				$fail = 1;
			}
		}
 
		if(($var1[$i] == $var1[$j]) && ($var3[$i] == $var3[$j])){
			if(($var2[$i]>=$var2[$j]) && (($var4[$i]>$var4[$j]) || ($var5[$i]>$var5[$j]) || ($var6[$i]>$var6[$j]) || ($var7[$i]>$var7[$j]))){
				print "FAIL with 2.1\n";
				$fail = 1;
			}
			if(($var2[$i]<$var2[$j]) && (($var4[$i]<$var4[$j]) || ($var5[$i]<$var5[$j]) || ($var6[$i]<$var6[$j]) || ($var7[$i]<$var7[$j]))){
				print "FAIL with 2.2\n";
				$fail = 1;
			}
		}
 
		if(($var2[$i] == $var2[$j]) && ($var3[$i] == $var3[$j])){
			if(($var1[$i]>=$var1[$j]) && (($var4[$i]>$var4[$j]) || ($var5[$i]>$var5[$j]) || ($var6[$i]>$var6[$j]) || ($var7[$i]>$var7[$j]))){
				print "FAIL with 1.1\n";
				$fail = 1;
			}
			if(($var1[$i]<$var1[$j]) && (($var4[$i]<$var4[$j]) || ($var5[$i]<$var5[$j]) || ($var6[$i]<$var6[$j]) || ($var7[$i]<$var7[$j]))){
				print "FAIL with 1.2\n";
				$fail = 1;
			}
		}
	}
}
 
if ($fail == 0){
	print"SUCCESS\n";
	$fail = 1;
}
Mon code fonctionne quand je n'ai qu'un seul bloc (FILE1) dans mon fichier résultat. Le problème vient quand j'en ai deux (FILE1 et FILE2), car il ne faut pas qu'il compare des résultats pour des fichiers résultats différents. Et je ne sais pas comment lui dire de faire ceci.

Pouvez vous m'aider s'il vous plaît?
Par ailleurs n'y a t'il pas une méthode plus simple et propre pour faire mes regex?

Bonne soirée