A voir également:
- [perl] données qui n'est pas prise en compte
- Créer un compte google - Guide
- Comment savoir qui regarde mon compte facebook - Guide
- Créer un compte gmail - Guide
- Supprimer compte instagram - Guide
- Créer un compte instagram sur google - Guide
6 réponses
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
26 avril 2006 à 19:18
26 avril 2006 à 19:18
Salut,
je crois qu'on c'est déjà vu.
Pour ton problème j'ai faut un petit exemple sur les numéros pairs et impairs (donc une analogie avec tes mot fr et all)
Donc le passage et fait et les valeurs sont pris en compte.
Je te propose d'écrire ta boucle de façon suivante
Voir aussi le conténu de tes tableaux.
Je te propose aussi, pour mieux comprendre ta façon de le faire d'écrire le script complet que tu as (et pas seulement les morceau de code qui t'interesses)
Je te donne l'exemple que j'ai fait, et essaie de le comprendre, entre temps je vais étudier un peu tes morceaux du code.
Voilà l'exemple que j'ai écrit pour toi
je crois qu'on c'est déjà vu.
Pour ton problème j'ai faut un petit exemple sur les numéros pairs et impairs (donc une analogie avec tes mot fr et all)
Donc le passage et fait et les valeurs sont pris en compte.
Je te propose d'écrire ta boucle de façon suivante
if ( condition1) { traitement... } elsif (condition2){ traitement... } else { que ce passe-t-il si les conditions 1 ou 2 ne sont pas traitées }
Voir aussi le conténu de tes tableaux.
Je te propose aussi, pour mieux comprendre ta façon de le faire d'écrire le script complet que tu as (et pas seulement les morceau de code qui t'interesses)
Je te donne l'exemple que j'ai fait, et essaie de le comprendre, entre temps je vais étudier un peu tes morceaux du code.
Voilà l'exemple que j'ai écrit pour toi
#! /usr/bin/perl use warnings;use strict; my @pair = qw/2 4/; my @impair = qw/1 3/; my (@res1,@res2); foreach my $val (0..6){ print "====Debut FOREACH====\n"; if (grep { /$val/ } @pair){ print "Debut IF1\n"; push @res1,$val; print "\@res1 : @res1 pair\n"; print "Fin IF1\n"; } elsif (grep { /$val/ } @impair){ print "Debut IF2\n"; push @res2,$val; print "\@res2 : @res2 impair\n"; print "Fin IF2\n"; } else { print "$val est hors limite!\n"; } print "----Fin foreach-----\n"; }Et le résultat
[root@localhost ~]# perl paire_impaire.pl ====Debut FOREACH==== 0 est hors limite! ----Fin foreach----- ====Debut FOREACH==== Debut IF2 @res2 : 1 impair Fin IF2 ----Fin foreach----- ====Debut FOREACH==== Debut IF1 @res1 : 2 pair Fin IF1 ----Fin foreach----- ====Debut FOREACH==== Debut IF2 @res2 : 1 3 impair Fin IF2 ----Fin foreach----- ====Debut FOREACH==== Debut IF1 @res1 : 2 4 pair Fin IF1 ----Fin foreach----- ====Debut FOREACH==== 5 est hors limite! ----Fin foreach----- ====Debut FOREACH==== 6 est hors limite! ----Fin foreach----- [root@localhost ~]#lami20j
J'ai continuer la batteries de tests et j'ai remarquéque si j'ajoute une virgule à la fin de chaque ligne de mon fichier, le programme se déroule bien sauf pour un mot d'àù je pense au problème d'accent
Amicalement Mathieu
Amicalement Mathieu
j'ai trouvé et réparé certaines erreurs donc je vous met le code en ligne pour avoir votre opinion
par contre lorsque j'aoute @res et @res2 un retour à la ligne apparait, est ce que ce retour à la ligne est automatique?
#!/usr/bin/perl use warnings; use strict; die "Usage : script syn_fr syn_all traduc_dierct resultat\n" if @ARGV != 4; my $syn = "./" . pop @ARGV; my $trad_direct="./" . pop @ARGV; my $dico_all="./" . pop @ARGV; my $dico_fr="./" . pop @ARGV; my %ved_syn_fr; my %ved_syn_all; my @ved_direct_fr_all; my @res=(); my @res2=(); my @resultat; open(DICO_FR,$dico_fr) || die ("Le fichier n'existe pas\n") ; while(<DICO_FR>){ my($verbe2,$liste_synonyme2) = split /:/,$_; $ved_syn_fr{$verbe2} = $liste_synonyme2; } close(DICO_FR); my @vedette_fr = keys %ved_syn_fr; open(DICO_ALL,$dico_all) || die ("Le fichier n'existe pas\n") ; while(<DICO_ALL>){ my ($verbe,$liste_synonyme)=split /:/,$_; $ved_syn_all{$verbe}=$liste_synonyme; #push @{$ved_syn_all{$verbe}},split /,/,$liste_synonyme; } close(DICO_ALL); my @vedette_all = keys %ved_syn_all; open(TRAD,$trad_direct) || die ("Le fichier n'existe pas\n"); while(<TRAD>){ my ($verbe, $liste)=split /:/,$_; my @eeee= split /,/,$liste; if(grep { /$verbe/ } @vedette_fr){ foreach my $var (@eeee){ print("\n$verbe , $var\n"); if((grep { /$var/ } @vedette_all) && (not($var eq ' ') )){ push(@res,$ved_syn_fr{$verbe}); push(@res2,$ved_syn_all{$var}); push(@resultat,$verbe,",",$var,":",@res,",",@res2); @res=(); @res2=(); } } } } close(TRAD); open SYN,">$syn" or die "E/S : $!"; print SYN @resultat and close SYN;
par contre lorsque j'aoute @res et @res2 un retour à la ligne apparait, est ce que ce retour à la ligne est automatique?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
26 avril 2006 à 20:02
Je pense avoir une idée du problème mais ce n'est pas sur
En gros je pense que je split mal mon fichier car il ne prend pas juste le dernier élément de ma liste
Et il y aussi peut-être un problème d'encodage pour certain terme ( à cause des accents) mais cela reste à vérifier
Je vais continuer les tests pour voir si les deux erreurs sont bien celle là.
Amicalement mathieu