Problème avec mon programme perl
Résolu/Fermé
karinn
Messages postés
49
Date d'inscription
samedi 13 janvier 2007
Statut
Membre
Dernière intervention
10 mai 2009
-
16 juil. 2007 à 17:18
karinn Messages postés 49 Date d'inscription samedi 13 janvier 2007 Statut Membre Dernière intervention 10 mai 2009 - 16 août 2007 à 11:53
karinn Messages postés 49 Date d'inscription samedi 13 janvier 2007 Statut Membre Dernière intervention 10 mai 2009 - 16 août 2007 à 11:53
A voir également:
- Problème avec mon programme perl
- Programme demarrage windows 10 - Guide
- Désinstaller programme windows 10 - Guide
- Cette action ne peut pas être réalisée car le fichier est ouvert dans un autre programme - Guide
- Forcer la fermeture d'un programme - Guide
- Sms programmé - Guide
43 réponses
karinn
Messages postés
49
Date d'inscription
samedi 13 janvier 2007
Statut
Membre
Dernière intervention
10 mai 2009
1
30 juil. 2007 à 16:15
30 juil. 2007 à 16:15
j'ai de nouveau un petit souci avec mon programme...
en fait je suis en train de faire le else { if { qui va de paire avec :
while ($ligne = <FICDICO_FR>) {
if ($ligne = ~/^$mot/) {
print "$ligne\n";
}
}
je mets mon "else if" ...qqun pourrait me dire ce qui cloche dedans svp ?
en fait je cherche a faire : si le mot que je veux traduire (que j'ai tapé) ne se trouve pas dans mon fichier, j'aimerai que mon programme l'ajoute dans le dico (avec la traduction à coté)
#!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;
$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;
}
else {
if ($ligne!~/^$mot_fr /) {
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 " ";
}
}
}
while ($ligne=<$ficdico_fr1>) {
print $ligne;
}
}
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;
}
}
je pensais que ca allait etre bon, puisk j'ai testé une partie du programme (open $ficdico_fr1....print $ligne)et elle marche, mais apparemment non donc voilà ...
la partie qui me pose pb est en italique...
Merci d'avance !!
en fait je suis en train de faire le else { if { qui va de paire avec :
while ($ligne = <FICDICO_FR>) {
if ($ligne = ~/^$mot/) {
print "$ligne\n";
}
}
je mets mon "else if" ...qqun pourrait me dire ce qui cloche dedans svp ?
en fait je cherche a faire : si le mot que je veux traduire (que j'ai tapé) ne se trouve pas dans mon fichier, j'aimerai que mon programme l'ajoute dans le dico (avec la traduction à coté)
#!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;
$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;
}
else {
if ($ligne!~/^$mot_fr /) {
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 " ";
}
}
}
while ($ligne=<$ficdico_fr1>) {
print $ligne;
}
}
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;
}
}
je pensais que ca allait etre bon, puisk j'ai testé une partie du programme (open $ficdico_fr1....print $ligne)et elle marche, mais apparemment non donc voilà ...
la partie qui me pose pb est en italique...
Merci d'avance !!
touriste77
Messages postés
32
Date d'inscription
vendredi 29 juin 2007
Statut
Membre
Dernière intervention
29 octobre 2009
25
31 juil. 2007 à 10:18
31 juil. 2007 à 10:18
salut,
en fait, je t'explique ce que ton code fait, tu comprendras pourquoi ça marche pas :
en gros si ton dico contient 100 lignes et que $mot est sur la dernière ligne, $mot va être rajouté 99 fois (pour les 99 premières lignes ou il n'a pas été trouvé) avant de rentrer dans le if ($ligne=~/^$mot_fr /).
comme solution, tu peux effectivement utilisé un $trouve, par exemple. ça donnerait :
bon courage pour la suite.
++
en fait, je t'explique ce que ton code fait, tu comprendras pourquoi ça marche pas :
while ($ligne=<$ficdico_fr1>) { # $ligne va prendre successivement comme valeur # chaque ligne de ton fichier $ficdico_fr1 if ($ligne=~/^$mot_fr /) { # il regarde une ligne puis vérifie si elle commence par $mot print ("$ligne\n"); $ligne=<STDIN>; chomp $ligne; } else { if ($ligne!~/^$mot_fr /) { # si la ligne analysée ne commence pas par $mot, # tu rajoutes le mot dans ton dico # le problème c'est que tu n'as pas forcément analysé tout le fichier, # mais juste la ligne # donc à chaque fois qu'une ligne ne contient pas $mot, # ce dernier va être rajouté au dico 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 " "; } } }
en gros si ton dico contient 100 lignes et que $mot est sur la dernière ligne, $mot va être rajouté 99 fois (pour les 99 premières lignes ou il n'a pas été trouvé) avant de rentrer dans le if ($ligne=~/^$mot_fr /).
comme solution, tu peux effectivement utilisé un $trouve, par exemple. ça donnerait :
$trouve = 0; while ($ligne=<$ficdico_fr1>) { if ($ligne=~/^$mot_fr /) { print ("$ligne\n"); $ligne=<STDIN>; chomp $ligne; $trouve = 1; } } if ($trouve == 0) { # si je n'ai pas trouvé $mot dans le dico, je le rajoute 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 " "; }vli vlou. (pas trop long l'explication? :) )
bon courage pour la suite.
++
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
31 juil. 2007 à 10:38
31 juil. 2007 à 10:38
Salut,
sans trop entrer dans les détails, j'ai pris seulement ton dernier code
$trouve = 0;
while ($ligne=<$ficdico_fr1>) {
if ($ligne=~/^$mot_fr /) {
print ("$ligne\n");
$ligne=<STDIN>;
chomp $ligne;
$trouve = 1;
}
}
if ($trouve == 0) { # si je n'ai pas trouvé $mot dans le dico, je le rajoute
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 " ";
}et ça donne plutôt quelque chose comme ça
pourquoi ouvrir et fermer le handle pour chaque ligne?
pour karinn
apart ton code dont la lisibilité manque ;-), veux tu expliquer exactament ce que tu veux faire et je t'écrirai le code en utilisant peut être une autre manière
sans trop entrer dans les détails, j'ai pris seulement ton dernier code
$trouve = 0;
while ($ligne=<$ficdico_fr1>) {
if ($ligne=~/^$mot_fr /) {
print ("$ligne\n");
$ligne=<STDIN>;
chomp $ligne;
$trouve = 1;
}
}
if ($trouve == 0) { # si je n'ai pas trouvé $mot dans le dico, je le rajoute
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 " ";
}et ça donne plutôt quelque chose comme ça
pourquoi ouvrir et fermer le handle pour chaque ligne?
pour karinn
apart ton code dont la lisibilité manque ;-), veux tu expliquer exactament ce que tu veux faire et je t'écrirai le code en utilisant peut être une autre manière
open $ficdico_fr1,'>>',"dico_fr1.txt" or die "fichier non ouvert!\n"; while ($ligne=<$ficdico_fr1>) { if ($ligne=~/^$mot_fr /) { print ("$ligne\n"); chomp($ligne=<STDIN>); }else { # si je n'ai pas trouvé $mot dans le dico, je le rajoute $ajout1="\n$mot_fr"; print $ficdico_fr1 $ajout1; open $ficdico_fr1,'<',"dico_fr1.txt" or die "fichier non ouvert!\n";# c'est quoi l'intêret ?! print " "; # la même question ?! } } close $ficdico_fr1;
Merci pour ton aide...j'ai mieux compris mes erreurs et mes excès d'ecriture dans mon script lol
Pour le script, je prefere l'ecrire toute seule (c gentil de m proposer de m'l'écrire cela dit) et demander de l'aide comme je le fais si j'en ai besoin :-) ...
voilà voilà
a plus !!!
Pour le script, je prefere l'ecrire toute seule (c gentil de m proposer de m'l'écrire cela dit) et demander de l'aide comme je le fais si j'en ai besoin :-) ...
voilà voilà
a plus !!!
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
3 août 2007 à 18:40
3 août 2007 à 18:40
Salut,
je prefere l'ecrire toute seule
c'est toi qui vois et j'apprecie :-))
je prefere l'ecrire toute seule
c'est toi qui vois et j'apprecie :-))
touriste77
Messages postés
32
Date d'inscription
vendredi 29 juin 2007
Statut
Membre
Dernière intervention
29 octobre 2009
25
3 août 2007 à 19:01
3 août 2007 à 19:01
salut,
contente de t'avoir un peu eclairée.
bonne continuation pour la suite ;)
++
contente de t'avoir un peu eclairée.
bonne continuation pour la suite ;)
++
karinn
Messages postés
49
Date d'inscription
samedi 13 janvier 2007
Statut
Membre
Dernière intervention
10 mai 2009
1
4 août 2007 à 13:17
4 août 2007 à 13:17
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....
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
5 août 2007 à 10:02
5 août 2007 à 10:02
Salut,
affiche ici la dernière version de ton script et utilise les balises code pour la lisibilité
merci
affiche ici la dernière version de ton script et utilise les balises code pour la lisibilité
merci
karinn
Messages postés
49
Date d'inscription
samedi 13 janvier 2007
Statut
Membre
Dernière intervention
10 mai 2009
1
5 août 2007 à 11:58
5 août 2007 à 11:58
ok je t'envoie ca...autant c moi qui me suis gourrée qque part...
voila !
merci d'avance...
#!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...
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
5 août 2007 à 12:04
5 août 2007 à 12:04
open $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)
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)
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
5 août 2007 à 12:20
5 août 2007 à 12:20
while ($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?
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?
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
5 août 2007 à 12:52
5 août 2007 à 12:52
voilà ton script
ce que tu vois en gras c'est le commentaire pour ton problème avec $trouve
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__
karinn
Messages postés
49
Date d'inscription
samedi 13 janvier 2007
Statut
Membre
Dernière intervention
10 mai 2009
1
5 août 2007 à 15:26
5 août 2007 à 15:26
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...
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...
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
5 août 2007 à 15:28
5 août 2007 à 15:28
oui, c'est clair :-))
toutefois, as-tu testé ton script avec la modif que j'ai fait?
toutefois, as-tu testé ton script avec la modif que j'ai fait?
karinn
Messages postés
49
Date d'inscription
samedi 13 janvier 2007
Statut
Membre
Dernière intervention
10 mai 2009
1
6 août 2007 à 10:52
6 août 2007 à 10:52
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 !
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 !
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
6 août 2007 à 14:47
6 août 2007 à 14:47
voilà 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 ;-)
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__
karinn
Messages postés
49
Date d'inscription
samedi 13 janvier 2007
Statut
Membre
Dernière intervention
10 mai 2009
1
6 août 2007 à 18:01
6 août 2007 à 18:01
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....
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....
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
6 août 2007 à 18:21
6 août 2007 à 18:21
pour 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
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
karinn
Messages postés
49
Date d'inscription
samedi 13 janvier 2007
Statut
Membre
Dernière intervention
10 mai 2009
1
7 août 2007 à 11:09
7 août 2007 à 11:09
ok !!
merci pour tes explications...
et le "last" j peux le mettre avec mon ecriture perl à moi ?...
merci pour tes explications...
et le "last" j peux le mettre avec mon ecriture perl à moi ?...
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
7 août 2007 à 12:03
7 août 2007 à 12:03
Salut,
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
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