[PERL]Remplacer chaine de caractères d'un txt

Résolu
TMart Messages postés 67 Statut Membre -  
TMart Messages postés 67 Statut Membre -
Bonjour tout le monde,

J'essaye de faire un petit scrip en PERL, qui après avoir mis en arguments en paramètre :
- Ouvre un fichier
- Lit le contenu
- Recherche la ligne commençant par "Logfile"
- Puis la modifie par la valeur de l'argument qui nous avons mis à paramètre.

Voici alors mon petit script :

use strict;use warnings;
open F_ECRIRE,'+<C:\Documents and Settings\TMart\Bureau\monfichier.txt' or die "E/S : $!\n";

while(<F_ECRIRE>)
{
(@ARGV >= 1) or die "Arguments insuffisants";
my $toto=$ARGV[0];
my $tata;
$tata=/^LogFile=/.../^\s*$/;
my $x;
$x =~ s/$tata/$toto/;
print F_ECRIRE if $x;

}
close F_ECRIRE;


Et quand je le lance j'ai des erreurs du style : "Use of uninitialized value in substitution (s///) ... "

Débutant en PERL, il se peut qu'il y est des énormités dans mon code, donc je m'en excuse d'avance si c'est le cas :).

Merci d'avance,

TMart.

2 réponses

  1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,
    lami20j@debian:~/trash$ cat monfichier.txt
    Logfile=20000
    blabla
    Logfile=20000
    blabla
    lami20j@debian:~/trash$ cat ccm1_modifiefichiersurplace.pl
    #!/usr/bin/perl
    use strict;use warnings;
    
    open F,"+< monfichier.txt" or die "E/S : $!\n";
    
    my @tableau = <F>;
    map {s/^(Logfile=).*$/${1}$ARGV[0]/} @tableau;
    seek(F,0,0);
    print F @tableau;
    close F;
    __END__
    lami20j@debian:~/trash$ perl ccm1_modifiefichiersurplace.pl 10
    lami20j@debian:~/trash$ cat monfichier.txt
    Logfile=10
    blabla
    Logfile=10
    blabla
    labla
    

    Cette méthode n'est conseillé que sur des petits fichiers (Un fichier des 10 000 lignes n'est pas grand, je parle d'un fichier qui fait quelques centaines de Mo)

    Si tu veux faire sur des grands fichiers vaut mieux d'utiliser d'autres méthodes.
    1
  2. TMart Messages postés 67 Statut Membre 7
     
    Merci beaucoup lami2Oj, ça marche nickel !
    0