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{$mot}))
{
$traductions{$mot}=@mots_droite;
}else{
$traductions{$mot}=($traductions{$mot}, @mots_droite);
}
print $traductions{$mot};
}
}
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{$mot}=($traductions{$mot}, @mots_droite);" par
"$traductions{$mot}=($traductions{$mot}, \@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.)
Tu évalues @mots_droite dans un contexte scalaire ($...=@...), donc c'est le nombre d'éléments du tableau qui t'es retourné.
Bonne chance,
-- Denis
Denis -esp2008-
Bonsoir,
$traductions{$mot}=@mots_droite; Tu évalues @mots_droite dans un contexte scalaire ($...=@...), donc c'est
le nombre d'éléments du tableau qui t'es retourné.
Ce n'est pas une réponse totale, j'aurais dû ajouter un "regarde `perldoc perllol`" (ou plus prosaïquement "rtfm"). En gros, on devrait des lignes ressemblant à ça dans le code:
$traductions{$mot}=@mots_droite;
Tu évalues @mots_droite dans un contexte scalaire ($...=@...), donc c'est
le nombre d'éléments du tableau qui t'es retourné.
Ce n'est pas une réponse totale, j'aurais dû ajouter un "regarde
`perldoc perllol`" (ou plus prosaïquement "rtfm"). En gros, on devrait
des lignes ressemblant à ça dans le code:
$traductions{$mot}=@mots_droite; Tu évalues @mots_droite dans un contexte scalaire ($...=@...), donc c'est
le nombre d'éléments du tableau qui t'es retourné.
Ce n'est pas une réponse totale, j'aurais dû ajouter un "regarde `perldoc perllol`" (ou plus prosaïquement "rtfm"). En gros, on devrait des lignes ressemblant à ça dans le code: