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:
1 2 3 4 5 6 7 8 9 10 11
|
sub Elimine_motsvides {
my $file=$_[0];
while($lines=<DOCE>){
while ($vides=$file){
chomp($vides);
$lines=~s/ +/ /g;
if($lines=~/$vides/){$lines=~s/ $vides / /g;}
}
print Temp $lines ;
} |
en quand je l'execute ça boucle sans arrêt
merci d'avance :)
Re: comment supprimer des mots d'un texte
Bonjour,
Code:
1 2
| sub Elimine_motsvides {
my $file=$_[0]; |
Simple question d'habitude, mais je préfère écrire
Code:
while($lines=<DOCE>){
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:
while ($vides=$file){
:alerte: 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:
1 2 3 4 5 6
| chomp($vides);
$lines=~s/ +/ /g;
if($lines=~/$vides/){$lines=~s/ $vides / /g;}
}
print Temp $lines ;
} |
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.