|
|
|
|
Bonjour à tout les fans de Perl!
Mon probléme:
J'ai un fichier de variable:var.txt
$$DATE1=01/01/79
$$DATE2=01/01/80
Un fichier de parametre param.txt
$$DATE1=05/05/05
$$DATE2=06/06/06
Comment remplacer les valeurs de param.txt par celle de var.txt?
Je veux à la fin avoir dans param.txt:
$$DATE1=01/01/79
$$DATE2=01/01/80
Je sais le faire en shell pour ceux que ça interesse:
********************************************************
if [[ $# -lt 2 ]]
then
Usage
exit 2
fi
VAL_FILE=$1
CFG_FILE=$2
FICHIER_TMP=./tmp_file.txt
cat $VAL_FILE | while read line
do
to_seek=`echo $line | cut -d\= -f1`
nb_occur=`grep $to_seek $CFG_FILE | wc -l`
sed "s,$to_seek=.*,$line,g" $CFG_FILE > $FICHIER_TMP
mv $FICHIER_TMP $CFG_FILE
#echo $line ' --> '$nb_occur ' ligne(s) modifiés) !'
done
********************************************************
J'ai du mal en perl...Merci au fan
Salut,
Mon probléme: J'ai un fichier de variable:var.txt $$DATE1=01/01/79 $$DATE2=01/01/80 Un fichier de parametre param.txt $$DATE1=05/05/05 $$DATE2=06/06/06 Comment remplacer les valeurs de param.txt par celle de var.txt? Je veux à la fin avoir dans param.txt: $$DATE1=01/01/79 $$DATE2=01/01/80 Je sais le faire en shell pour ceux que ça interesse: Je ne comprends pas ta question. En fait le fichier param.txt va contenir le contenu du fichier var.txt. Donc même en shell tu peux faire plus simple cat var.txt > param.txt Plus des détails s'il te plaît.Merci. lami20j |
C'est pas trés clair c'est vrai.
|
Oui on pourrait imaginer:
|
Re,
|
Re,
#! /usr/bin/perl
use warnings;
use strict;
open VAR,"var.txt" or die "E/S : $!\n";
open PARAM,"param.txt" or die "E/S : $!\n";
open RES,">resultat.txt" or die "E/S : $!\n";
my @p = <PARAM>;
my %h;
while (<VAR>){
my ($x,$y) = $_ =~ /\$\$(.*)=(.*)/;
$h{$x} = $y;
}
map {for my $e(keys %h){ if ($_ =~ /(.*)$e=?.*/){ $_=~ s/.*/\$\$$e=$h{$e}/}}} @p;
print RES @p;Le résultat
Le fichier var.txt [lamitest@localhost my_perl_script]$ cat var.txt $$DATE1=01/01/79 $$DATE2=01/01/80 $$var100=10/10/10 $$VAR1=01/01/01979 $$VAR2=toto $$VAR3=3 [lamitest@localhost my_perl_script]$Le fichier param.txt [lamitest@localhost my_perl_script]$ cat param.txt $$DATE1=05/05/05 hfgh $$DATE2=06/06/06 sdf $$var100=ksdjfklj yyyyy $$var=OOOOO $var4=titi $VAR1=01/01/1970 [des autre variables] $$VAR2=tonton [du blabla] $$VAR3=4L'exécution du script et le résultat (j'ai préfèré d'enregistrer le résultat dans le fichier resultat.txt et de garder le fichier param.txt. [lamitest@localhost my_perl_script]$ perl ccm_line.pl [lamitest@localhost my_perl_script]$ cat resultat.txt $$DATE1=01/01/79 hfgh $$DATE2=01/01/80 sdf $$var100=10/10/10 yyyyy $$var=OOOOO $var4=titi $$VAR1=01/01/01979 [des autre variables] $$VAR2=toto [du blabla] $$VAR3=3 [lamitest@localhost my_perl_script]$Je n'ai pas utilisé les fichiers en tant qu'arguments pour le script. En revanche j'ai ouvert 3 handle de fichiers (2 en lecture et un en écriture). Si ça ne te convient pas comme ça ou tu essaies de modifier le script ou tu fait un signe. lami20j |
Re,
|