rss
Perl et Variable
par Goku
 Fil de Discussions
Statut : Non résolu
jeudi 27 avril 2006 à 11:30:31
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
Répondre à Goku  Signaler ce message aux modérateurs Aller au dernier message

1


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par lami20j, le jeudi 27 avril 2006 à 13:40:36 Fil de Discussions
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
Répondre à lami20j

2


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par Goku, le jeudi 27 avril 2006 à 13:57:28 Fil de Discussions
C'est pas trés clair c'est vrai.


Le fichier de variable:var.txt
$$DATE1=01/01/79
$$DATE2=01/01/80

Un fichier de parametre param.txt
blabla
$$DATE1=05/05/05
$$DATE2=06/06/06
blabla

Le but est de lancer une commande du type
perl.pl var.txt param.txt

le perl.pl parse le fichier var.txt et initialise les valeurs de param.txt pour obtenir en sortie:
blabla
$$DATE1=01/01/79
$$DATE2=01/01/80
blabla

Chaque fois qu'une variable existante dans var.txt est retrouvé dans param.txt, il change la valeur de param.txt par celle figurant dans var.txt...C'est le principe d'un fichier de paramétre que l'on initialise par un autre....
C'est plus clair?;D
Répondre à Goku

3


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par lami20j, le jeudi 27 avril 2006 à 15:27:14 Fil de Discussions
Salut,

je sais ce que tu veux.

En revanche j'ai besoin de savoir si tes fichiers contient autre chose à part les lignes de genre


$$DATE1=01/01/79
$$DATE2=01/01/80

Merci.

lami20j
Répondre à lami20j

4


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par Goku, le jeudi 27 avril 2006 à 16:27:18 Fil de Discussions
Oui on pourrait imaginer:
var.txt:
$$VAR1=01/01/01979
$$VAR2=toto
$$VAR3=3

param.txt (avant le passage du perl)
$var4=titi
$VAR1=01/01/1970
[des autre variables]
$$VAR2=tonton
[du blabla]
$$VAR3=4

et hop aprés le perl param.txt devient:
$var4=titi
$VAR1=01/01/01979
[des autre variables]
$$VAR2=titi
[du blabla]
$$VAR3=3

Dans var.txt y'a que des données du type:$$var=?

apres dans param, c'est au perl que retrouver les $$var et de changer leur valeurs....pas simple j'avoue...
Répondre à Goku

5


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par lami20j, le jeudi 27 avril 2006 à 16:55:20 Fil de Discussions
Re,

tu as une aproche ici
http://www.clubic.com/forum/remplacement-de-chaines-de-caracteres-t344302.html

voir ma dernière réponse et aussi la réponse de jipicy en shell.

Entre temps je vais essayer d'adapter à ton cas.

lami20j
Répondre à lami20j

6


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par Goku, le jeudi 27 avril 2006 à 17:34:31 Fil de Discussions
Ok je regarde!
Merci pour ton aide!
Répondre à Goku

7


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par lami20j, le jeudi 27 avril 2006 à 22:55:15 Fil de Discussions
Re,

Le script
#! /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=4
L'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
Répondre à lami20j

8


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par lami20j, le jeudi 27 avril 2006 à 23:09:39 Fil de Discussions
Re,

A ajouter à la fin de script si tu veux que le fichier resultat.txt devient param.txt
rename 'resultat.txt','param.txt';
lami20j
Répondre à lami20j

9


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par lami20j, le jeudi 27 avril 2006 à 23:28:10 Fil de Discussions
Re,

Pour encore reduire la saisie et rendre la ligne
map {for my $e(keys %h){ if ($_ =~ /(.*)$e=?.*/){ $_=~ s/.*/\$\$$e=$h{$e}/}}} @p;
encore plus condesé tu peux écrire
map {for my $e(keys %h){if (/(.*)$e=?.*/){s/.*/\$\$$e=$h{$e}/}}} @p;


Si tu veux l'écrire come une boucle while tu peux faire comme ça
map {
 for my $e(keys %h){
   if ($_ =~ /(.*)$e=?.*/){
     $_=~ s/.*/\$\$$e=$h{$e}/
   }
 }
} @p;
ou
map {
 for my $e(keys %h){
   if (/(.*)$e=?.*/){
     s/.*/\$\$$e=$h{$e}/
   }
 }
} @p;

lami20j
Répondre à lami20j

10


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par Goku, le vendredi 28 avril 2006 à 09:33:20 Fil de Discussions
GENIALLLL!
Merci Potos!
Répondre à Goku

11


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par Goku, le vendredi 28 avril 2006 à 10:03:39 Fil de Discussions
Re,

Pourquoi quand dans var.txt, j'ai:
$$DATE1=01/01/79

et dans param.txt,j'ai
dubalbadevantlavariable.$$DATE1=24/04/06

dans resultat.txt je me retrouve avec
$$DATE1=01/01/79

alors que j'attends
dubalbadevantlavariable.$$DATE1=01/01/79

....merci en tout cas,super boulot....
Répondre à Goku

13


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par lami20j, le vendredi 28 avril 2006 à 10:47:41 Fil de Discussions 
Salut,

puisque tu n'as pas parler de cette situation.

Mais est-ce que ça marche comme tu veux?
Sinon, dit le pour que je puisse faire des modifications.

lami20j
Répondre à lami20j

12


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par Goku, le vendredi 28 avril 2006 à 10:34:07 Fil de Discussions
....il faut remplacer le .* par \$\$$e(.*) dans le dernier sed...

ça marche hyper bien!
Répondre à Goku
Discussions pertinentes trouvées dans le forum
20/02 12h34[perl]Variable avant et après "use strict;&quProgrammation21/02 23h433
28/04 15h30[Perl] Ajouter en fin de ligne d'une variableProgrammation18/05 10h403
11/01 14h29[Perl]-Envoyer une variable par mail unixProgrammation16/01 19h1311
06/06 16h10Variable perl dans PHPWebmastering06/06 16h100
25/03 14h35[perl] vérifier variable numériqueProgrammation01/04 13h487
Plus de discussions sur « Perl et Variable » Discussion en cours Discussion fermée Problème résolu
Logiciels pertinents trouvés dans les téléchargements
Télécharger Firstpage 2006Firstpage - First Page 2006 est un éditeur html gratuit et excellent. Il permet de travailler un code HTML en couleur, ainsi que de...Catégorie: Editeurs HTML
Licence: Freeware/gratuit
Télécharger ActivePerl 5.6.1.629ActivePerl - ActivePerl est un interpréteur Perl gratuit et puissant pour plates formes Microsoft Windows. Il nécessite "Microsoft...Catégorie: Perl
Licence: Open Source
Télécharger Jedit 4.2Jedit - Editeur de texte capable de supporter la majeure partie des langages de programmation (perl,java,php,c,asp, etc.) et...Catégorie: Développement
Licence: Open Source
Télécharger Crimson Editor 3.70Crimson Editor - Crimson Editor est un éditeur professionnel de code source pour Windows. Ce programme, très léger en terme de taille,...Catégorie: Webmaster
Licence: Freeware/gratuit
Plus de logiciels gratuits sur « Perl et Variable »
Répondre
Titre du message :
Votre pseudo:
Votre email :
Message: 
  •  
  •  
Options: Recevoir les réponses par mail.
 

Aide