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
Bonjour !
Je 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

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
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 !!
0
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
salut,
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.
++
0
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
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

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;
0
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 !!!
0

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
Salut,

je prefere l'ecrire toute seule
c'est toi qui vois et j'apprecie :-))
0
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
salut,
contente de t'avoir un peu eclairée.
bonne continuation pour la suite ;)
++
0
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
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....
0
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
Salut,

affiche ici la dernière version de ton script et utilise les balises code pour la lisibilité
merci
0
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
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...
0
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
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)
0
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
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?
0
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
voilà 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__
0
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
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...
0
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
oui, c'est clair :-))

toutefois, as-tu testé ton script avec la modif que j'ai fait?
0
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
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 !
0
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
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 ;-)

#!/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__
0
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
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....
0
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
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



0
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
ok !!
merci pour tes explications...
et le "last" j peux le mettre avec mon ecriture perl à moi ?...
0
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
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
0