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 :

comment supprimer des mots d'un texte


Sujet :

Langage Perl

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 24
    Points : 18
    Points
    18
    Par défaut comment supprimer des mots d'un texte
    bonjour,
    j'ai un petit probleme avec ma fonction Elemine_ motsvides : qui parcours le fichier et le compare au fichierdes mots vides, lorsque un mot est commun aux deux, il est remplacé par un espace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    sub Elimine_motsvides {
    my $file=$_[0];
    while&#40;$lines=<DOCE>&#41;&#123;
       while &#40;$vides=$file&#41;&#123;
       	chomp&#40;$vides&#41;;
    	$lines=~s/ +/ /g;
    	if&#40;$lines=~/$vides/&#41;&#123;$lines=~s/ $vides / /g;&#125;
       &#125;
    print Temp $lines ;
    &#125;
    en quand je l'execute ça boucle sans arrêt
    merci d'avance

  2. #2
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut Re: comment supprimer des mots d'un texte
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sub Elimine_motsvides &#123;
    my $file=$_&#91;0&#93;;
    Simple question d'habitude, mais je préfère écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while&#40;$lines=<DOCE>&#41;&#123;
    J'imagine que le handle DOCE est ouvert à l'extérieur de la fonction ... quelque part, ça me gène aussi, mais ce n'est rien de bloquant ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       while &#40;$vides=$file&#41;&#123;
    Là, ça ne va pas !!!
    A chaque tour de boucle, tu ranges dans $vide le contenu de $file. L'évaluation d'une telle affectation est un test toujours vrai. Ton while ne se terminera donc jamais - en plus de ne pas forcément faire ce que tu veux.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
       	chomp&#40;$vides&#41;;
    	$lines=~s/ +/ /g;
    	if&#40;$lines=~/$vides/&#41;&#123;$lines=~s/ $vides / /g;&#125;
       &#125;
    print Temp $lines ;
    &#125;
    A toi de voir s'il peut aussi être intéressant d'utiliser la classe de caractères "séparateurs" \s, au lieu des blancs " " dans les expressions régulières.

    De plus, il est superflu de tester l'expression rationnelle avant d'effectuer la substitution, d'autant que la substitution n'est pas garantie dans ton cas puisque le test est différent du changement : /$vide/ n'est pas / $vide / ...

    J'imagine que le handle Temp est aussi ouvert au préalable à l'extérieur, mais encore une fois, ce n'est pas critique pour ce cas.

    Voici quelques pistes ...


    Bon courage.
    La FAQ Perl est par ici
    : La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 24
    Points : 18
    Points
    18
    Par défaut
    bonjour,
    merci pour tes explication , j'ai pu résoudre le problème de boucle infini.
    j'ai une autre question est ce qu'il exite une fonction prédéfini qui permet de savoir si un élément e appartient à une liste l .
    merci

  4. #4
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Citation Envoyé par visteur
    j'ai une autre question est ce qu'il exite une fonction prédéfini qui permet de savoir si un élément e appartient à une liste l .
    Tout dépend de ta définition de l'élément et de la liste.

    Si l'élément est une chaine et la liste une chaine aussi, les expressions rationnelles conviennent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    my $e = "toto";
    my $l = "titi toto tata";
    print "Dedans" if &#40;$l =~ m/\b$e\b/&#41;;
    J'ai utilisé, ici, le motif encadré par des \b qui correspondent aux extrémités de mots, ce qui permet un match de "toto" avec "toto", et pas avec "rototo".

    Si l'élément est une valeur scalaire et la liste une vraie liste (comme un tableau), alors la fonction grep nous aidera :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    my $e = "toto";
    my @l = qw &#40;titi toto tata&#41;;
    print "Dedans" if &#40;grep &#123; /\b$e\b/ &#125; @l&#41;;
    Grep retourne une liste d'éléments correspondants au test entre accolades, et c'est cette liste dont j'évalue le nombre d'éléments dans le if.
    Ce test, entre accolades, peut aussi être codé de façon plus pertinente, selon la nature des données :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    grep &#123; $_ eq $e &#125; @l; # pour un test d'égalité de chaines
    grep &#123; $_ == $e &#125; @l; # pour un test d'égalité de nombres
    Enfin, il existe une fonction permettant de savoir si un élément de tableau ou de hachage est bien défini : exists
    La FAQ Perl est par ici
    : La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment stocker des mots clés dans une bas Mysql
    Par renofx1 dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 05/01/2006, 01h57
  2. Comment supprimer des fichiers en nombre ?
    Par Didier L dans le forum API, COM et SDKs
    Réponses: 13
    Dernier message: 25/01/2005, 17h01
  3. HELP!Comment supprimer des enregistrements de tables jointes
    Par ROOTPARIS dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 10/06/2004, 17h41
  4. Comment changer des mots dans un fichier?
    Par ptitbonum dans le forum Linux
    Réponses: 5
    Dernier message: 08/04/2004, 00h42
  5. Réponses: 14
    Dernier message: 15/01/2004, 02h15

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