Recherche et remplacement

Fermé
ahmedCSS Messages postés 10 Date d'inscription dimanche 1 novembre 2015 Statut Membre Dernière intervention 5 juin 2016 - Modifié par jordane45 le 5/06/2016 à 02:27
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 - 8 juin 2016 à 10:21
Bonjour,

J'ai un fichier texte F1 et j'ai un autre fichier qui contient une liste de termes dans chaque ligne , je veux parcourir ce dernier et si je trouve le même mot dans F1 je veux le modifier, et par la suite je vais générer un autre fichier contenant les modification effectuée, voici le code:
open(FILE,$F1) || die "Problème d'ouverture du ficher en entrée";
open(FILEOUT,">$filenameout") || die "Problème d'ouverture";

open(F,"/home/Bureau/term.txt")||die " Pb pour ouvrir";

while($ligne = <FILE> ) {

 @val = split(/ /, $ligne); # chaque mot du F1 dans une case 
  for ($c=0;$c<=$#val;$c++)
 {
$z=$val[$c]; 

while($l = <F> ) {  # parcourir le fichier des termes
if($l = $z){ # si un terme est égale à un mot dans F1
$z =~ s/$z/[$z] /g;} # modifier ce mot en ajoutant deux crochets
}

print FILEOUT lc($z." "); 

}
$z=""; 
 
}

close (FILE);

close F;
close (FILEOUT);

fichier F1 contient ces deux ligne par exemple:
real madrid is the club of ronaldo
ronaldo plays at real madrid since 2009

le fichier term contient:
ronaldo
messi

le fichier générer lors de l'éxécution :
[real] madrid is the club of ronaldo
ronaldo plays at real madrid since 2009

j'ai pas trouvé l'erreur, il modifie la première mot de la phrase seuelemnt malgrés qu'elle est fausse,

le résultat souhaité comme suit normalement:
real madrid is the club of [ ronaldo ]
[ronaldo] plays at real madrid since 2009

merci pour votre aide

EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici :ICI

Merci d'y penser dans tes prochains messages.

1 réponse

[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
Modifié par [Dal] le 8/06/2016 à 10:25
Salut ahmedCSS,

Ton expression est bonne, c'est le tout le reste qui ne va pas.

#!/usr/bin/perl

use strict;
use warnings;

my $orig = "real madrid is the club of ronaldo
ronaldo plays at real madrid since 2009";

$orig =~ s/ronaldo/[ronaldo]/g;

print $orig;

donne bien :

$ ./ahmedCSS.pl 
real madrid is the club of [ronaldo]
[ronaldo] plays at real madrid since 2009

Quelques indications :

- utilise strict et warnings
- déclare des variables pour tes filehandles, pas de mots nus
- lis la totalité du fichier où les remplacements doivent être effectués dans une chaîne (https://metacpan.org/pod/perlfaq5#How-can-I-read-in-an-entire-file-all-at-once)
- lis la totalité du fichier contenant les mots à traiter dans un tableau (exemples sur le même lien)
- énumère chaque mot du tableau avec un foreach et remplace tous les mots avec ton expression régulière
- il te faudra aussi retirer le retour à la ligne lu sur chaque mot (puisque le fichier des mots à traiter comporte un mot par ligne), fait le avec
chomp()



Dal
0