Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1942 connectés 

  FORUM HardWare.fr
  Programmation
  Perl

  [PERL] remplacer un mot dans un fichier

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[PERL] remplacer un mot dans un fichier

n°2306921
web_olivie​r
R1 Powaaaaa
Posté le 23-10-2017 à 13:03:08  profilanswer
 

Bonjour,
 
J'ai un fichier texte de plusieurs lignes qui contient à plusieurs endroits le mot contenu dans la variable $configname et je veux le remplacer par le contenu de la variable $replace.
Voila ce que j'ai écris :
 

Code :
  1. open(FILE_IN,$LOG);
  2. my @contenu = <FILE_IN>;
  3. close(FILE_IN);
  4. open(FILE_OUT,">$LOG2" );
  5. foreach my $ligne(@contenu)
  6. {
  7.  $ligne=~ s/$configname/$replace/ge;
  8.  print FILE_OUT "$ligne";
  9. }
  10. close (FILE_OUT);


 
Le problème c'est qu'il ne remplace que le premier, le deuxième et le dernier mot, mais pas tous les autres :( .
 
Quelqu'un à une idée du problème dans mon code ?
 
:jap:

mood
Publicité
Posté le 23-10-2017 à 13:03:08  profilanswer
 

n°2306922
rat de com​bat
attention rongeur méchant!
Posté le 23-10-2017 à 16:23:29  profilanswer
 

Chez moi ça fonctionne... Comment sont définies les variables que tu utilises, notamment $configname? A quoi exactement ressemble ton fichier $LOG?

 

Ceci étant, à ma connaissance il vaut mieux utiliser la version de open() avec trois arguments et inutile de lire tout le fichier d'un coup si tu fais une boucle après. Perso je ferais comme ceci:

Code :
  1. #personnellement je trouve ces deux lignes indispensables, après le FATAL=>'all' on peut en discuter...
  2. use strict;
  3. use warnings FATAL=>'all';
  4.  
  5. #gestion d'erreur avec les fichiers!
  6. use autodie;
  7.  
  8. my $LOG="input";
  9. my $LOG2="output";
  10. my $configname="old";
  11. my $replace="new";
  12.  
  13. open(FILE_IN, '<', $LOG);
  14. open(FILE_OUT,'>', $LOG2);
  15.  
  16. while((my $ligne=<FILE_IN> )) #parenthèses supplémentaires pour indiquer
  17. #qu'on veut bien une assignation et non pas une comparaison avec faute de frappe (= à la place de ==)
  18. {
  19.    $ligne=~ s/$configname/$replace/geo; #o=once=le regex ne change pas ($configname et $replace),
  20. #pas indispensable mais peut-être utile (vitesse)
  21.    print FILE_OUT $ligne; #pas besoin de mettre des guillemets
  22. }
  23.  
  24. close(FILE_IN);
  25. close (FILE_OUT);


Selon le fichier et ce que tu veux remplacer il peut être nécessaire de modifier le regex pour ne considérer que des mots entiers (et pas remplacer $configname à l'intérieur d'un mot).

 

edit: +\n dans les commentaires


Message édité par rat de combat le 23-10-2017 à 16:24:24
n°2306923
gilou
Modérateur
Modzilla
Posté le 23-10-2017 à 16:45:40  profilanswer
 

Et faire un truc homogène avec le reste, sans passer par des variables spéciales pour les file handlers
open(my $fh_in, '<', $log);
 
et utiliser les variables built-in dans les boucles:
foreach (@contenu) {
 s/$configname/$replace/ge;
 print $fh_out $_;
}
ou
foreach (<$fh_in> ) {
 s/$configname/$replace/ge;
 print $fh_out $_;
}
 
A+,


Message édité par gilou le 23-10-2017 à 16:47:48

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Perl

  [PERL] remplacer un mot dans un fichier

 

Sujets relatifs
macro qui me renvoie le nom et le chemin d'un fichierFormulaire d'envoi de fichier
Remplacer le contenu d'une colonne dans ma base de donnée SQLSAP SQL Importer un fichier excel
[PRC]Ouvrir un fichier au format PRC?Nommer un fichier aléatoirement
[Perl] Comparaison de fichiersCréation d'un fichier avec signature MD5 définie
suppression de fichier impossible[perl] remplacer les \n par des <br> dans un fichier ...
Plus de sujets relatifs à : [PERL] remplacer un mot dans un fichier


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR