Bonsoir à tous
je veux faire un programme qui lit deux fichiers qui ont ce format:
1 Q0 DerOpthalmologe/80950033 0 1.0 TF_IDF
1 Q0 DerRadiologe/80380710 1 0.9586699756125027 TF_IDF
1 Q0 MonatsschriftKinderheilkunde/01480013 2 0.9586699756125027 TF_IDF
2 Q0 ZfuerKardiologie/90880788 0 1.0 TF_IDF
2 Q0 DerChirurg/90701174 1 0.9177183904260889 TF_IDF
2 Q0 DerUnfallchirurg/81010830 2 0.8655239936791111 TF_IDF
.......
je fais un split pour décomposer chaque ligne si je trouve que le premier chiffre est équivalent, je vérifie le champ 3 (exerOpthalmologe/80950033), s'il sont égaux, je fais une somme des champs Numéro 4 pour les deux lignes (des deux fichiers).
Si la ligne n'a pas d'équivalent (champ 1 et 4), on l'écrit dans le fichier sortie résultat,
Mon problème j'arrive à trouver les lignes dont le champs 1 et 4 sont équivalent, mais j'arrive pas à afficher les autres lignes, je peux les afficher plusiers fois à cause des boucles.
le problème de ce code c'est que dès que je veux afficher les autres lignes, j'ai des problèmes
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
98
99 #!/usr/bin/perl print "bonjour\n"; open(FIC, $ARGV[0]); open(FICC, $ARGV[1]); my @a = (); my @b = (); my $l=0; my $v=0; my $g=0; print "choisis un nom de fichier pour contenir le résultat\n"; chomp(my $fic2=<STDIN>); open(FIC2, ">$fic2"); #--------------------------------------------------- # initialisation des variables #--------------------------------------------------- $i=0; $j=0; while (<FICC>) { my $ligne=$_; $b[$i]=$ligne; # $b premier fichier et stockage dans une table $i++; } while (<FIC>) { my $ligne=$_; $a[$j]=$ligne; # $a lecture second fichier $j++; } foreach my $tab(@b){ @aa=split(/\s/,$tab); foreach my $kh(@a){ chomp($kh); @bb=split(/\s/,$kh); if($bb[0] eq $aa[0]){ #comparer le premier champs pour les deu lignes des deux fichiers, si ils sont équivalent, je compare le champs numéro 4 et j'affiche les deux scores if($bb[2] eq $aa[2]){ print FIC2 "$aa[0] $aa[2] $aa[4] $bb[4] \n"; } else{print FIC2 "$kh ";} } } }
Merci pour votre aide
Partager