Problème avec mon programme perl
RésoluJe travaille sous Perl en programmation et j'utilise Crimson Editor pour taper mes scripts....
J'ai un souci avec mon programme au niveau de la variable $trouve et je ne comprends pas pourquoi. Dans le shell, ils me disent bareword "oui" is not allowed... (je sais ce que ca veut dire mais bon ca ne m'aide pas vraiment).
En fait c'est depuis que j'ai intégré la partie avec la variable $trouve que j'ai un souci...(je le mets en italique).
En fait ce que je dois faire c'est ouvrir un fichier (qui sera un dico) et si le mot est dedans soit la traduction de ce mot est donnée soit on l'ajoute dans le dico...
Par contre SVP !!!! la facon dont j'ai l'habitude d'écrire en perl ne ressemble pas vraiment à tout ce que je vois sur le site donc : pas de commandes que je ne connais pas svp...en cas, j vous donnerai ce kj'ai eu en cours...
Voilà ce que j'ai fait jusqu'à présent :
#!usr/bin/perl
use strict;
use warnings;
my $rep;
my $rep2;
my $mot_langue;
my $mot_fr;
my $mot_ang;
my $trad_ang;
my $trad_fr;
my $texte_langue;
my $trouve;
my $ajout2;
my $nomfich;
my $fic_fr;
my $ficdico_fr;
my $ligne;
my $dico_fr;
my $nomfich1;
$nomfich=shift;
$nomfich1=shift;
print ("Voulez-vous traduire un mot, O ou N ?");
$rep=<STDIN>;
chomp $rep;
if ($rep eq "O") {
print ("Voulez-vous traduire un mot francais en anglais, 0 ou N ?");
$rep2=<STDIN>;
chomp $rep2;
if ($rep2 eq "O") {
print ("tapez le mot francais à traduire \n");
$mot_fr=<STDIN>;
chomp $mot_fr;
open $ficdico_fr,'<',"dico_fr.txt" or die "fichier non ouvert!\n";
$trouve=non;
if ($trouve==oui) {
print $trad_ang;
$trad_ang=<STDIN>;
chomp $trad_ang;
}
else {
if ($trouve==non) {
open $ficdico_fr,'>>',"dico_fr.txt" or die "fichier non ouvert!\n";
$ajout2="\n$dico_fr";
print $ficdico_fr $ajout2;
close $ficdico_fr;
open $ficdico_fr,'<',"dico_fr.txt" or die "fichier non ouvert!\n";
print " ";
while ($ligne=<$ficdico_fr>) {
print $ligne;}
}
}
}
else {
if ($rep2 eq "N") {
print ("tapez le mot anglais à traduire \n");
$mot_ang=<STDIN>;
chomp $mot_ang;
}
}
}
else {
if ($rep eq "N") {
print ("tapez le texte à traduire \n");
$texte_langue=<STDIN>;
chomp $texte_langue;
}
}
Voilà...j'espère que qqun pourra m'aider !!
merci d'avance
Configuration: Windows XP Internet Explorer 7.0
43 réponses
Plusieurs éléments montrent que le problème principal réside dans l'intégration de la variable $trouve et des valeurs littérales 'oui' et 'non' lors de la gestion d'un dictionnaire en Perl. La meilleure réponse propose d'abord concevoir un algorithme clair, puis d'écrire le code en suivant une approche structurée, avec une fonction 'dico' qui gère les traductions et les ajouts. Elle suggère également de travailler séparément les directions français/anglais et anglais/français, en utilisant des fichiers distincts et une logique réutilisable pour faciliter les modifications et l'extension. En exemple pratique, la proposition illustre un script de menu et une boucle de traduction qui ajoutent automatiquement un mot inexistant, tout en conservant une architecture prête à être étendue.
-
coucou je viens de decouvrir que la prof a mis des cours sur le site de la fac...y compris les commandes et les différentes ecritures de code que tu m'as montrées...
donc je vais te piquer ton ecriture lol pask c clair et net que c largement plus pratique...
bon il faut que je vois qd mm pour la traduction de texte pask je bloque tjs sur comment extraire de ma ligne la traduction d'unmot...mais bon vu les nouveaux cours que j'ai ca devrait aller je pense...je viens de finir de les lire mais je vais les approfondir...
et si j'ai u truc que je comprends pas ben j ferai appel a tes bons services ;-) -
ben pour le script je n'arrete pas d'essayer...seulement quand je m'y mets j'ai l'esprit qui pense a tellement de choses en mm tps a propos de mon programme et la maniere de le faire que je m'y perds un peu...
sinon pour ce que tu m'as dit a propos des 2 scripts et tout , oui tkt pas c ce que je fai depuis le debut en changeant juste les variables...
au fait pour l'ajout des traductions dans les dico je me suis apercue qu'en fait ca marchait !! lol ...donc je suis contente
et la j bloque toujours sur la traduction de texte ( francais anglais pour le moment...aps je sais k j'aurais juste a copier coller changer les variables...)...je vais essayer de moins m'eparpiller...
merci pour ton script au fait mais je garde mon ecriture a moi...si je commence a ecrire autrement je ne vais plus m'en sortir...ya pas mal de trucs que je n'ai pas appris et que tu ecris toi (bien que j'aime apprendre de nouvelles choses là n'est pas le souci)...
bref
si jms je me perds de nouveau je te fais signe... -
ModérateurSalut,
comme je te l'ai dit au début il fallait d'abord faire l'algo de ton cas et ensuite commencer écrire le code
d'après ton message je vois que tu ne l'as pas fait :-))
je te conseille une chose
de travailler au début dans une seule direction
c'est-à-dire dico français/anglais
une fois que tu as fini le dico français/anglais et qu'il fonctionne il ne te restera qu'à copier le code et faire les modifications de nom de fichiers
de toute façon ça sera la même chose avec la seule différence qu'il traitera anglais/français
c'est pour ça que je te parle d'un algo puisqu'en fait tu auras presque le même code 2 fois
pense à la programmation structurée dans ton cas
quand j'ai écrit mon bout de script je voulais tout simplement de ne pas m'eloigner de ton code, mais si j'aurais du faire un tel script je l'aurais fait autrement
Voici un exemple
j'ai crée une fonction dico qui fait tout
si jamais il y a des problèmes il faut juste modifier les variables ou regarder dans la fonction
c'est plus compact et facile à faire des modifications
le script#!/usr/bin/perl use strict;use warnings; my $trouve = 0; print <<"FIN"; Dictionnaire 1. français/anglais 2. anglais/français 3. quitter FIN print "Faites votre choix : "; chomp (my $rep = <STDIN>); dico($rep); sub dico { my $choix = shift; my ($dir,$dico); if ($choix == 3){ die "Vous avez choisi de quitter. Au revoir!\n"; }elsif ($choix == 1){ ($dir,$dico) = ('français/anglais', 'dico_fr.txt'); }else { ($dir,$dico) = ('anglais/français', 'dico_en.txt'); } print "********** Traduction $dir **********\n"; print "Entrez le mot à traduire : "; chomp(my $mot = <STDIN>); open DICO, "$dico" or die "E/S : $!\n"; my $ligne; while($ligne = <DICO>){ if ($ligne =~ /^$mot\b/){ $trouve = 1; last; } } close DICO; if ($trouve == 0){ open DICO,">> $dico" or die "E/S : $!\n"; print "Entrez la traduction du mot inexistant : "; chomp( my $traduction = <STDIN>); print DICO "$mot $traduction\n"; }else { print "$ligne"; } } __END__Résultat français/anglais
en gras tu verras le nouveau mot ajouté et c'est pareil pour anglais/françaislami20j@deb:~/trash$ cat dico_fr.txt ami friend grand big lami20j@deb:~/trash$ perl ccm.pl Dictionnaire 1. français/anglais 2. anglais/français 3. quitter Faites votre choix : 3 Vous avez choisi de quitter. Au revoir! lami20j@deb:~/trash$ perl ccm.pl Dictionnaire 1. français/anglais 2. anglais/français 3. quitter Faites votre choix : 1 ********** Traduction français/anglais ********** Entrez le mot à traduire : ami ami friend lami20j@deb:~/trash$ perl ccm.pl Dictionnaire 1. français/anglais 2. anglais/français 3. quitter Faites votre choix : 1 ********** Traduction français/anglais ********** Entrez le mot à traduire : ville Entrez la traduction du mot inexistant : city lami20j@deb:~/trash$ cat dico_fr.txt ami friend grand big ville city
Résultat anglais/françaislami20j@deb:~/trash$ cat dico_en.txt friend ami big grand lami20j@deb:~/trash$ perl ccm.pl Dictionnaire 1. français/anglais 2. anglais/français 3. quitter Faites votre choix : 3 Vous avez choisi de quitter. Au revoir! lami20j@deb:~/trash$ perl ccm.pl Dictionnaire 1. français/anglais 2. anglais/français 3. quitter Faites votre choix : 2 ********** Traduction anglais/français ********** Entrez le mot à traduire : friend friend ami lami20j@deb:~/trash$ perl ccm.pl Dictionnaire 1. français/anglais 2. anglais/français 3. quitter Faites votre choix : 2 ********** Traduction anglais/français ********** Entrez le mot à traduire : city Entrez la traduction du mot inexistant : ville lami20j@deb:~/trash$ cat dico_en.txt friend ami big grand city ville
tu fait ce que tu veux, mais si tu écrit de cette façon c'est plus pratique :-)
Bon courage! ;-) -
en fait tout bien réfléchi j prefere garder mon ecriture perl ...cela dit, comme j't'ai dit, si j'ai besoin d'aide, je te fais signe ;-)
-
-
-
j te redonne mon code pask j'ai rajouté une petite partie pour mettre les mots du fichier qui contient le texte francais (pask en fait il faut auss que la traduction de texte anglais soit possible) en retour chariot...normalement ce k'j'ai rajouté ressort en gras...
#!usr/bin/perl use strict; use warnings; my $rep; my $rep2; my $rep3; my $mot_langue; my $mot_fr; my $mot_ang; my $trad_ang; my $trad_fr; my $texte_langue; my $texte_fr; my $trouve; my $ajout2; my $nomfich; my $fictexte_fr; my $ficdico_fr1; my $ligne; my $ligne2; my $ligne3; my $nomfich1; my $dico_fr1; my $ligne1; my $dico_ang1; my $ficdico_ang1; my $nomfich2; my $ajout1; my $dico_ajoutang; my $nomfich3; my $ajout3; my $fictexte_ang; my $texte_ang; my $nomfich4; my $longueur1; my $i; my $mot1; $trouve=0; $nomfich=shift; $nomfich1=shift; $nomfich2=shift; $nomfich3=shift; $nomfich4=shift; print ("Voulez-vous traduire un mot, O ou N ?"); $rep=<STDIN>; chomp $rep; if ($rep eq "O") { print ("Voulez-vous traduire un mot francais en anglais, 0 ou N ?"); $rep2=<STDIN>; chomp $rep2; if ($rep2 eq "O") { print ("**********Dictionnaire francais anglais**********\n"); print ("tapez le mot francais a traduire \n"); $mot_fr=<STDIN>; chomp $mot_fr; open $ficdico_fr1,'<',"dico_fr1.txt" or die "fichier non ouvert!\n"; while ($ligne=<$ficdico_fr1>) { if ($ligne=~/^$mot_fr /) { print ("$ligne\n"); $trouve=1; } else { if ($trouve==0) { open $ficdico_fr1,'>>',"dico_fr1.txt" or die "fichier non ouvert!\n"; $ajout1="\n$mot_fr"; print $ficdico_fr1 $ajout1; close $ficdico_fr1; open $ficdico_fr1,'<',"dico_fr1.txt" or die "fichier non ouvert!\n"; print " "; $trouve=1; } } } } else { if ($rep2 eq "N") { print ("**********Dictionnaire anglais francais**********\n"); print ("tapez le mot anglais a traduire \n"); $mot_ang=<STDIN>; chomp $mot_ang; open $ficdico_ang1,'<',"dico_ang1.txt" or die "fichier non ouvert!\n"; while ($ligne1=<$ficdico_ang1>) { if ($ligne1=~/^$mot_ang /) { print ("$ligne1\n"); } } } } } else { if ($rep eq "N") { print ("Voulez-vous traduire un texte francais, O ou N ?\n"); $rep3=<STDIN>; chomp $rep3; if ($rep3 eq "O") { print ("tapez le texte francais a traduire\n"); $texte_fr=<STDIN>; chomp $texte_fr; open $fictexte_fr,'>>',"texte_fr.txt" or die "fichier non ouvert!\n"; $ajout2="\n$texte_fr"; print $fictexte_fr $ajout2; close $fictexte_fr; open $fictexte_fr,'<',"texte_fr.txt" or die "fichier non ouvert!\n"; print " "; $longueur1=length($texte_fr); $i=0; $mot1=""; while ($i<$longueur1){ if (substr($texte_fr,$i,1) ne " ") { $mot1=$mot1.substr($texte_fr,$i,1); } else { print ("$mot1\n"); $mot1=""; } if ($i==$longueur1-1) { print ( "$mot1\n"); } $i=$i+1; } } else { if ($rep3 eq "N") { print ("tapez le texte anglais a traduire\n"); $texte_ang=<STDIN>; chomp $texte_ang; open $fictexte_ang,'>>',"texte_ang.txt" or die "fichier non ouvert!\n"; $ajout3="\n$texte_ang"; print $fictexte_ang $ajout3; close $fictexte_ang; open $fictexte_ang,'<',"texte_ang.txt" or die "fichier non ouvert!\n"; print " "; while ($ligne3=<$fictexte_ang>) { print $ligne3; } } } } }
mon souci est de savoir si c possible de mettre $mot1 en tableau pour ensuite les comparer avec la partie traduction des lignes de mes fichiers dictionnaires ("jeu game" pour F/A et "game jeu" pour A/F) ou si j dois faire des boucles "for", une qui prendrait le mot sur une ligne et une qui parcourrait les lignes ...??
tu comprends ce k j veux faire ou pas ??....ptetr k ma facon d'expliker n'est pas très claire...
merci d'avance en tout cas ! -
juste pour dire que le fait d'avoir mis $mot1 en tableau ne me sert a rien puisk je veux traiter un texte et k ca ressorte en texte et pas en tableau...bref !
sinon j'ai rajouté la partie pour l'ajout des mots non connus et leur traduction dans le dico mais maintenant que je l'ai mise la partie traduction pure et simple de mots ne marche plus et je ne comprends pas pkoi ; autre chose : pour l'ajout dans le dico, seule l 'ajout dans le dico anglais marche vraiment et les mots apparaissent dans le dico a l'inverse du dico francais...sauf k'en enlevant la partie sur l'ajout des mots et de leur traduction dans le dico, la partie traduction remarche bien sûr mais pour le dico francais, les mots que j'ai voulu rajouter marchent aussi alors qu'ils ne sont pas ecrits dans le dico !!! va comprendre !!!
bref....
voila !
-
-
ModérateurSalut,
non, dans ton code il n'y a pas besoin
en revanche je trouve que la version avec un menu c'est plus agréable et justifié
au mois on a à l'écran le menu de ce qu'on peut faire
à toi de voir
avant de commencer de coder pour la partie texte/remplacement
vaut mieux faire un algo pour voir ce que ça donne -
ok !!
merci pour tes explications...
et le "last" j peux le mettre avec mon ecriture perl à moi ?... -
Modérateurpour 1
c'est l'écriture here document sur Perl
ça evite d'écrire plusieurs lignes avec print
print "Dictionnaire\n\n";
print "1. français/anglais\n";
print "2. anglais/français\n";
print "3. quitter\n"
pour 2
\b sers pour ancrer le mot
par exemple si tu as le mot ami dans le dico fr - en
si tu tapes
am
le mot sera reconnu
mais avec \b il n'y a pas de risque
tu peux enlever le \b et faire des tests
pour 3
la boucle while parcours toutes les lignes
mais ça ne sers à rien si le mot est trouvé
avec last on sors de la boucle si le mot est trouvé
tu peux enlever last et tu verras le résultat
Ex
si le dico contient
ami friend
grand big
fille girl
si je teste le mot ami par exemple
que ce passera?
le mot est trouvé et $trouve mis à 1
mais la boucle va continuer
le mot ne correspond pas à grand donc $trouve est mis à 0
et ainsi de suite
en bref, le test sur la derniere ligne sera pris en compte
avec last je m'arrête de que je trouve le mot et $trouve est 1
ou je continue jusqu'à la fin et $trouve est zéro
-
Re !!
Non ca va j'aime bien... :-)
Mais y a deux trois trucs que je comprends pas....ne m'en veux pas lol !!
1-
print <<"FIN";
Dictionnaire
1. français/anglais
2. anglais/français
3. quitter
FIN
-> à quoi ca sert ?...je ne connais pas cette trnascription...
2-
if ($ligne =~ /^$mot_fr\b/){
-> le \b/ ca correspond a quoi ?
3-
while($ligne = <DICO_FR_EN>){
if ($ligne =~ /^$mot_fr\b/){
$trouve = 1;
last;
-> ca sert a quoi "last" ?...
voila voila sinon oui on peut continuer ;-)
Merci bcp pour ton aide en tout cas.... -
Modérateurvoilà une petit script qui fera ce que tu as besoin pour l'instant
j'ai gardé $trouve
qu'en penses-tu
le code n'est pas difficile et il garde la structure de ton code :-)
pour les phrases ça sera un peu pareil
si ça te va comme ça on peut continuer :-)) (personne ne va nier ton travail ;-)
#!/usr/bin/perl use strict;use warnings; my $trouve = 0; print <<"FIN"; Dictionnaire 1. français/anglais 2. anglais/français 3. quitter FIN print "Faites votre choix : "; chomp (my $rep = <STDIN>); if ($rep eq '1'){ print "********** Traduction français/anglais **********\n"; print "Entrez le mot à traduire : "; chomp(my $mot_fr = <STDIN>); open DICO_FR_EN, "dico_fr.txt" or die "E/S : $!\n"; my $ligne; while($ligne = <DICO_FR_EN>){ if ($ligne =~ /^$mot_fr\b/){ $trouve = 1; last; } } close DICO_FR_EN; if ($trouve == 0){ open FR_EN,">> dico_fr.txt" or die "E/S : $!\n"; print "Entrez la traduction du mot inexistant : "; chomp( my $traduction = <STDIN>); print FR_EN "$mot_fr $traduction\n"; }else { print "$ligne\n"; } }elsif ($rep eq '2'){ print "********** Traduction anglais/français **********\n"; print "Entrez le mot à traduire : "; chomp(my $mot_en = <STDIN>); open DICO_EN_FR, "dico_en.txt" or die "E/S : $!\n"; my $ligne; while($ligne = <DICO_EN_FR>){ if ($ligne =~ /^$mot_en\b/){ $trouve = 1; last; } } close DICO_EN_FR; if ($trouve == 0){ open EN_FR,">> dico_en.txt" or die "E/S : $!\n"; print "Entrez la traduction du mot inexistant : "; chomp( my $traduction = <STDIN>); print EN_FR "$mot_en $traduction\n"; }else { print "$ligne\n"; } }elsif ($rep eq '3'){ die "Vous avez choisir de quitter. Au revoir!\n"; } __END__ -
ok ok ! :-)
pour le script que tu as modifié, oui je l'ai testé et effectivement c mieux :-) j'ai aussi compris mon erreur avec les chomp et STDIN donc merci (!!) pask pour moi c t machinal en fait c pour ca...lol
sinon pour le script, le souci c kil ne me rajoute pas le mot que je cherche a traduire sil n'existe pas dans le dico :-s ...
voila voila ! -
Modérateuroui, c'est clair :-))
toutefois, as-tu testé ton script avec la modif que j'ai fait? -
qques lignes de mon dico francais/anglais :
jeu game
choix choice
voiture car
...
et les lignes pour mon dico anglais/francais sont les mm mais a l envers bien sur...
en fait ce que doit faire mon programme c'est :
soit traduire un ou plusieurs mots (donc tant qu'il le souhaite) soit traduire un texte français
pour la traduction de un ou plusieurs mots (je n'ai pas encore fait la partie pour "plusieurs mots"...faudra que je me penche dessus d'ici peu) :
- choix du sens (francais/anglais ou l'inverse)
- si le mot que l'on veut traduire est dans le dico alors le programme donne la ligne de traduction ; si le mot n'y est pas il faut l'ajouter avec sa traduction dans le(s) dico(s)
pour la traduction du texte
-le programme parcourt le texte
-quand un mot du texte n'est pas dans le dico, il ya demande de traduction et ajout dans le(s) dico(s)
voila j'espere que c'est plus clair... -
Modérateurvoilà ton script
ce que tu vois en gras c'est le commentaire pour ton problème avec $trouve#!usr/bin/perl use strict;use warnings; my $rep; my $rep2; my $mot_langue; my $mot_fr; my $mot_ang; my $trad_ang; my $trad_fr; my $texte_langue; my $trouve; my $ajout2; my $nomfich; my $fic_fr; my $ficdico_fr1; my $ligne; my $nomfich1; my $dico_fr1; my $ligne1; my $dico_ang1; my $ficdico_ang1; my $nomfich2; my $ajout1; my $dico_ajoutang; $trouve=0; $nomfich=shift; $nomfich1=shift; $nomfich2=shift; print ("Voulez-vous traduire un mot, O ou N ?"); $rep=<STDIN>; chomp $rep; if ($rep eq "O") { print ("Voulez-vous traduire un mot francais en anglais, 0 ou N ?"); $rep2=<STDIN>; chomp $rep2; if ($rep2 eq "O") { print ("tapez le mot francais à traduire : "); $mot_fr=<STDIN>; chomp $mot_fr; open $ficdico_fr1,'>>',"dico_fr1.txt" or die "fichier non ouvert!\n"; close $ficdico_fr1; open $ficdico_fr1,'<',"dico_fr1.txt" or die "fichier non ouvert!\n"; while ($ligne=<$ficdico_fr1>) { if ($ligne=~/^$mot_fr /) { print ("$ligne"); $trouve=1; }else { if ($trouve==0) { open $ficdico_fr1,'>>',"dico_fr1.txt" or die "fichier non ouvert!\n"; $ajout1="\n$mot_fr"; print $ficdico_fr1 $ajout1; close $ficdico_fr1; open $ficdico_fr1,'<',"dico_fr1.txt" or die "fichier non ouvert!\n"; print " "; $trouve = 1; # pour sortir de la boucle il faut mettre $trouve à 1 # sinon il sera toujours 0, donc tu as une boucle infini # puisque la condition est toujours vraie if ($trouve == 0) # quand tu mets $trouve = 1 la condition n'est plus remplis # donc tu sors de la boucle } } } }else { if ($rep2 eq "N") { print ("tapez le mot anglais à traduire \n"); $mot_ang=<STDIN>; chomp $mot_ang; open $ficdico_ang1,'>>',"dico_ang1.txt" or die "fichier non ouvert!\n"; close $ficdico_ang1; open $ficdico_ang1,'<',"dico_ang1.txt" or die "fichier non ouvert!\n"; while ($ligne1=<$ficdico_ang1>) { if ($ligne1=~/^$mot_ang /) { print ("$ligne1\n"); $ligne1=<STDIN>; chomp $ligne1; } } } } }else { if ($rep eq "N") { print ("tapez le texte à traduire \n"); $texte_langue=<STDIN>; chomp $texte_langue; } } __END__ -
Modérateurwhile ($ligne=<$ficdico_fr1>) {
if ($ligne=~/^$mot_fr /) {
print ("$ligne\n");
$ligne=<STDIN>;
chomp $ligne;
$trouve=1;
je ne comprends pas non plus ce que tu veux faire ici
$ligne contiendra au fur à mesure les lignes du fichier ficdico_fr1
alors pourquoi tu demandes une entrée depuis STDIN pour $ligne?
dit moi si je comprends bien ton problème
tu as 2 fichiers dico
le fichier dico_fr qui est un dictionnaire français/anglais
ami (nom) - friend.• boyfriend (petit ami).• girlfriend (petite amie).
.
.
et le fichier dico_ang qui est un dictionnaire anglais/français
friend (nom) - ami.• familier.• camarade.
.
.
ensuite ton script demande un mot en français ou en anglais
en fonction de cas tu vérifies si le mot existe déjà dans le dictionnaire
si c'est le cas alors tu affiche la traduction
sinon tu ajoutes mot au dictionnaire
ai-je bien compris? -
Modérateuropen $ficdico_fr1,'>>',"dico_fr1.txt" or die "fichier non ouvert!\n";
close $ficdico_fr1;
je ne comprends pas pourquoi tu écris ça
ça ne sers à rien
tu ouvres un fichier en mode ajout et toute de suite tu le ferme sans faire une opération quelconque
donc c'est inutile
ça m'aidera aussi si tu me donnes tes fichiers (je n'ai pas besoin des fichies complets, juste quelques lignes pour tester en réelle)
-
ok je t'envoie ca...autant c moi qui me suis gourrée qque part...
#!usr/bin/perl use strict; use warnings; my $rep; my $rep2; my $mot_langue; my $mot_fr; my $mot_ang; my $trad_ang; my $trad_fr; my $texte_langue; my $trouve; my $ajout2; my $nomfich; my $fic_fr; my $ficdico_fr1; my $ligne; my $nomfich1; my $dico_fr1; my $ligne1; my $dico_ang1; my $ficdico_ang1; my $nomfich2; my $ajout1; my $dico_ajoutang; $trouve=0; $nomfich=shift; $nomfich1=shift; $nomfich2=shift; print ("Voulez-vous traduire un mot, O ou N ?"); $rep=<STDIN>; chomp $rep; if ($rep eq "O") { print ("Voulez-vous traduire un mot francais en anglais, 0 ou N ?"); $rep2=<STDIN>; chomp $rep2; if ($rep2 eq "O") { print ("tapez le mot francais à traduire \n"); $mot_fr=<STDIN>; chomp $mot_fr; open $ficdico_fr1,'>>',"dico_fr1.txt" or die "fichier non ouvert!\n"; close $ficdico_fr1; open $ficdico_fr1,'<',"dico_fr1.txt" or die "fichier non ouvert!\n"; while ($ligne=<$ficdico_fr1>) { if ($ligne=~/^$mot_fr /) { print ("$ligne\n"); $ligne=<STDIN>; chomp $ligne; $trouve=1; } else { if ($trouve==0) { open $ficdico_fr1,'>>',"dico_fr1.txt" or die "fichier non ouvert!\n"; $ajout1="\n$mot_fr"; print $ficdico_fr1 $ajout1; close $ficdico_fr1; open $ficdico_fr1,'<',"dico_fr1.txt" or die "fichier non ouvert!\n"; print " "; } } } } else { if ($rep2 eq "N") { print ("tapez le mot anglais à traduire \n"); $mot_ang=<STDIN>; chomp $mot_ang; open $ficdico_ang1,'>>',"dico_ang1.txt" or die "fichier non ouvert!\n"; close $ficdico_ang1; open $ficdico_ang1,'<',"dico_ang1.txt" or die "fichier non ouvert!\n"; while ($ligne1=<$ficdico_ang1>) { if ($ligne1=~/^$mot_ang /) { print ("$ligne1\n"); $ligne1=<STDIN>; chomp $ligne1; } } } } } else { if ($rep eq "N") { print ("tapez le texte à traduire \n"); $texte_langue=<STDIN>; chomp $texte_langue; } }
voila !
merci d'avance... -
ModérateurSalut,
affiche ici la dernière version de ton script et utilise les balises code pour la lisibilité
merci -
coucou juste pour te dire que j'ai essayé de faire avec la variable $trouve mais ca ne marche pas :-s....je comprends pas pkoi....
-
salut,
contente de t'avoir un peu eclairée.
bonne continuation pour la suite ;)
++
-
ModérateurSalut,
je prefere l'ecrire toute seule
c'est toi qui vois et j'apprecie :-))
- 1
- 2
- 3