Parcours de deux fichier

saf92 Messages postés 3 Date d'inscription   Statut Membre Dernière intervention   -  
saf92 Messages postés 3 Date d'inscription   Statut Membre Dernière intervention   -
bonjour, je suis débutante en programmation perl et je voudrait parcourir 2 fichiers et enregistrer les lignes des deux fichier qui ont le même id dans un autre fichier.
par exemple fichier result_fr:
3: aaaaaaaaa
4:BBBBBBB
et fichier result_en:
1 :ffffffff
2:kkkkkk
3:lllllllll
4:mmmmm
le fichier resulat_final doit afficher
3:aaaaaaaaa lllllllll
4:BBBBBBB mmmmm
voici mon script:
my $filename = "C:\\Perl\\bin\\result_fr.txt";
my $filename1 = "C:\\Perl\\bin\\result_en.txt";
my $filename2 = "C:\\Perl\\bin\\ress_final.txt";
open(my $fh, '<' , $filename) or die "Erreur" ;
open(my $fh1, '<' , $filename1) or die "Erreur" ;
open(my $fh2, '>>' , $filename2) or die "Erreur" ;
while (my $line = <$fh>)
{
while (my $line1=<$fh1>)
{
my @T1=split(/ / , $line);
my @T2=split(/ / , $line1);
if ($T1[0] eq $T2[0])
{
print  $fh2 $line $line1,"\n";
}
}
}
print "ok ";

mon script exécute mais affiche seulement la résultat d'un seul parcours. Merci de m'aider
A voir également:

3 réponses

blux Messages postés 27166 Date d'inscription   Statut Modérateur Dernière intervention   3 362
 
Salut,

deux questions :

- tes fichiers sont-ils bien triés ?
- as-tu des id multiples dans l'un ou l'autre des fichiers ?

De plus, mais on verra après, tes while s'exécutent de manière inconditionnelle (à part la fin de fichier)...

A+ blux
 "Les cons, ça ose tout.
C'est même à ça qu'on les reconnait"
0
saf92 Messages postés 3 Date d'inscription   Statut Membre Dernière intervention  
 
les id des fichiers sont bien triés , et il y a pas des id multiple dans les fichiers
0
blux Messages postés 27166 Date d'inscription   Statut Modérateur Dernière intervention   3 362
 
C'est compliqué parce que tu ne reviens jamais au début de $fh1.

Ex :

je lis $fh et $fh1, j'extrais les clés, elles ne sont pas identiques, je lis $fh1. Je les trouve identiques, j'écris $fh2 et je continue à lire $fh1 jusqu'à la fin, donc aucune chance de retrouver quelque chose identique dans $fh.

Ensuite, quand je suis à la fin de $fh1, je lis un autre $fh et comme $fh1 est à la fin, mon while se termine tout de suite...

Il faut soit fermer $fh1 quand tu as trouvé des id communs (mais sur de gros fichiers, ça fait un produit cartésien, donc très long), soit opter pour un algorithme de type 'appairage de fichiers' avec tests de grandeurs entre les clés pour savoir lequel on doit faire progresser en lecture pour rattraper (éventuellement l'autre).

A+ blux
 "Les cons, ça ose tout.
C'est même à ça qu'on les reconnait"
0

 
Salut saf92,

Tu charges le premier fichier et tu parcours chaque ligne, en utilisant l'identificateur comme clef d'un hash et le contenu qui suit comme valeur du hash, jusqu'à la fin de ce fichier (utilise une regexp pour séparer les deux).

Après avoir fait cela, tu parcours le second fichier ligne par ligne aussi, et en appliquant la même regexp, tu testes si l'identificateur correspond à une clef existante de ton hash, si oui, tu concatènes à la valeur existante la nouvelle valeur, jusqu'à la fin de ce fichier.

Puis tu affiches ton hash, éventuellement en le triant selon la clef, si cela a un sens pour toi.

Dal
0