IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Perl Discussion :

pb code boucle?


Sujet :

Langage Perl

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 23
    Par défaut pb code boucle?
    Bonjour,

    J'ai un pb dans mon code.
    Il fonctionne mais il me donne toujours la même réponse en fonction du mot que j'ai entré en premier.

    par exemple: si j'entre "communication" (il se trouve bien dans le texte)
    il m'indique : le mot apparait aux lignes..."

    ensuite j'entre "bonjour" (il ne se trouve pas dans le texte)
    mais il m'indique quand meme : "le mot apparait aux lignes..."

    Inversément, si j'écris "bonjour"
    il indique : mot introuvable
    ensuite, j'écris "communication"
    il indique "mot introuvable".

    Est-ce que vous voyez ou se situe le pb?
    Merci

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    #============================================================
    #Script = distributiontexte.pl                              =
    #Date = 30/03/2010                                          =
    #Ce script indique à quelle(s) ligne(s) apparait            =
    #le mot indique par l'utilisateur sur x nombres de lignes   =
    #au total.													= 
    #Ce script prend en compte deux arguments :                 =
    # - 1 fichier avec le texte de litterature                  =
    # - le mot indique par l'utilisateur                        =
    #============================================================
     
     
    use strict;
    use warnings;
     
     
    #########################################
    #INITALISATION DES FICHIERS
    #########################################
     
    #Récupération du fichier
    my $fichier_litterature = $ARGV[0]; 
     
    open (LITTERATURE, "<","$fichier_litterature")
    	|| die ("Impossible d'ouvrir $fichier_litterature");
     
    my $ligne = "";
    my $nb_ligne = 0;
    my $mot_texte = 0;
    my @litterature = ();
     
    #########################################
    #BOUCLE
    #########################################
     
    while (&entreunmot ()) {
    	my $mot_utilisateur = <STDIN>;
    	chomp ($mot_utilisateur);
     
    		while ($ligne = <LITTERATURE>) {
     
    			chomp ($ligne);
    			$nb_ligne++;
     
    			if ($ligne =~ /$mot_utilisateur/ig) {
    				push (@litterature, $nb_ligne,",");
    				$mot_texte++;
    			}	
    		}
     
    #################################################
    #FERMETURE DES FICHIERS ET AFFICHAGE DU RESULTAT
    #################################################
     
    	if ($mot_texte == 0) {
    		print "Mot introuvable\n";
    	}
     
    	else {
    		my $derniere_ligne = pop (@litterature) ;
    		$derniere_ligne =~ s/,$// ;
    		print "Ce mot apparait aux lignes @litterature $derniere_ligne sur $nb_ligne lignes\n";
    	}
     
    }
     
    close(LITTERATURE);
     
    #################################################
    #FONCTION CREEE
    #################################################
    sub entreunmot {
    	print "Entrez un mot:";
    }

  2. #2
    Membre chevronné
    Avatar de Schmorgluck
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    371
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2006
    Messages : 371
    Par défaut
    D'abord, tu devrais utiliser les balises CODE (symbole #) pour présenter ton code.

    Ensuite, le problème, c'est d'une part que tu ne réinitialises pas tes variables, et d'autre part tu essaies de "relire" le fichier alors qu'en réalité tu es à la fin dudit fichier.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 23
    Par défaut
    Citation Envoyé par Schmorgluck Voir le message
    D'abord, tu devrais utiliser les balises CODE (symbole #) pour présenter ton code.

    Ensuite, le problème, c'est d'une part que tu ne réinitialises pas tes variables, et d'autre part tu essaies de "relire" le fichier alors qu'en réalité tu es à la fin dudit fichier.
    Merci pour ta réponse rapide.
    Je t'avoue que je suis débutante donc, comment faut-il faire pour réinitialiser les variables?

    Mais normallement je devrais pouvoir relire le fichier puisque je le ferme en dehors de la boucle?

  4. #4
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Par défaut
    Au lieu d'ouvrir et fermer le fichier à l'extérieur de ta boucle, tu dois le faire à l'intérieur, afin que la lecture de ton fichier se refasse à chaque nouveau mot depuis le début du fichier.

    De même, tu dois initialiser tes variables utilisées dans la boucle ($ligne, $nb_ligne, $mot_texte, @litterature) à l'intérieure de cette boucle while ((&entreunmot ()), afin que notamment @literrature et $nb_ligne et $mot_texte soient initialisés pour chaque nouveau mot recherché.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 23
    Par défaut
    Citation Envoyé par Philou67430 Voir le message
    Au lieu d'ouvrir et fermer le fichier à l'extérieur de ta boucle, tu dois le faire à l'intérieur, afin que la lecture de ton fichier se refasse à chaque nouveau mot depuis le début du fichier.

    De même, tu dois initialiser tes variables utilisées dans la boucle ($ligne, $nb_ligne, $mot_texte, @litterature) à l'intérieure de cette boucle while ((&entreunmot ()), afin que notamment @literrature et $nb_ligne et $mot_texte soient initialisés pour chaque nouveau mot recherché.
    MERCI beaucoup!!!!! ça fonctionne maintenant.

    Bonne journée
    Biz

Discussions similaires

  1. Ameliorer code : Boucle trop longue
    Par diego45 dans le forum MATLAB
    Réponses: 3
    Dernier message: 05/12/2014, 10h55
  2. Optimisation code (boucles if)
    Par Kormondre dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 02/07/2013, 18h34
  3. Optimisation code boucle
    Par Marius76 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 22/11/2010, 14h32
  4. [E-03] problème code boucle
    Par Emily2711 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 26/02/2009, 12h42
  5. [SQL - procStock ] optimisation du code (éviter les boucles)
    Par luimême dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 06/10/2005, 17h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo