Table de hachage contenant des listes - Perl - Programmation
MarshPosté le 02-02-2005 à 04:15:58
J'ai un fichier dictionnaire contenant des lignes du genre "chaise, fauteuil=seat, chair" (plusieurs mots français pour plusieurs mots anglais - plusieurs traductions d'un même mot français peuvent être données à plusieurs lignes différentes): le but est de créer un tableau associatif qui prend comme clef un mot français et qui renvoie la liste des mots anglais correspondants. Dans l'exemple, ça devrait créer une structure du genre:
chaise=>(chair,seat) fauteuil=>(chair,seat)
J'ai fait:
%traductions=(); while (<PREMIER> ){ chomp; ($gauche, $droite)=split(/=/,$_); @mots_gauche=split (/, /, $gauche); @mots_droite=split (/, /, $droite); for $mot (@mots_gauche){ if (!defined($traductions)) { $traductions=@mots_droite; }else{ $traductions=($traductions, @mots_droite);
} print $traductions; }
}
Et ça ne marche pas: au lieu de sortir les traductions anglaises (complétées au fur et à mesure), ça m'imprime une suite de chiffres (ce qui laisse penser que les listes sont interprétées dans un contexte scalaire). J'ai jonglé un peu en remplaçant les "$" par des "@" ou par des "@{$", ou en remplaçant "$traductions=($traductions, @mots_droite);" par "$traductions=($traductions, \@mots_droite);" (en adaptant des exemples trouvés sur le web), mais ça ne marche pas (au mieux, si je mets l'argument du print entre crochets, ça m'imprime des ARRAY(0x806cc30): comme ça ressemble à un pointeur sur un tableau, j'essaie de lui demander le n-ième élément en le fournissant entre crochets, mais ça ne donne rien.)
Marsh Posté le 02-02-2005 à 04:15:58
J'ai un fichier dictionnaire contenant des lignes du genre "chaise,
fauteuil=seat, chair" (plusieurs mots français pour plusieurs mots
anglais - plusieurs traductions d'un même mot français peuvent être
données à plusieurs lignes différentes): le but est de créer un
tableau associatif qui prend comme clef un mot français et qui renvoie
la liste des mots anglais correspondants. Dans l'exemple, ça devrait
créer une structure du genre:
chaise=>(chair,seat)
fauteuil=>(chair,seat)
J'ai fait:
%traductions=();
while (<PREMIER> ){
chomp;
($gauche, $droite)=split(/=/,$_);
@mots_gauche=split (/, /, $gauche);
@mots_droite=split (/, /, $droite);
for $mot (@mots_gauche){
if (!defined($traductions))
{
$traductions=@mots_droite;
}else{
$traductions=($traductions, @mots_droite);
}
print $traductions;
}
}
Et ça ne marche pas: au lieu de sortir les traductions anglaises
(complétées au fur et à mesure), ça m'imprime une suite de chiffres
(ce qui laisse penser que les listes sont interprétées dans un
contexte scalaire). J'ai jonglé un peu en remplaçant les "$" par des
"@" ou par des "@{$", ou en remplaçant
"$traductions=($traductions, @mots_droite);" par
"$traductions=($traductions, \@mots_droite);" (en adaptant
des exemples trouvés sur le web), mais ça ne marche pas (au mieux, si
je mets l'argument du print entre crochets, ça m'imprime des
ARRAY(0x806cc30): comme ça ressemble à un pointeur sur un tableau,
j'essaie de lui demander le n-ième élément en le fournissant entre
crochets, mais ça ne donne rien.)