Flux rss
Rechercher : dans
Par :

Perl et Variable

Goku, le jeudi 27 avril 2006 à 11:30:31 
 Signaler ce message aux modérateurs

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

1

lami20j, le jeudi 27 avril 2006 à 13:40:36

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

Goku, le jeudi 27 avril 2006 à 13:57:28

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

lami20j, le jeudi 27 avril 2006 à 15:27:14

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

Goku, le jeudi 27 avril 2006 à 16:27:18

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

lami20j, le jeudi 27 avril 2006 à 16:55:20

Re,

tu as une aproche ici
http://www.clubic.com/forum/remplacement-de-chaines-de-carac­teres-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

Goku, le jeudi 27 avril 2006 à 17:34:31

Ok je regarde!
Merci pour ton aide!

Répondre à Goku

7

lami20j, le jeudi 27 avril 2006 à 22:55:15

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

lami20j, le jeudi 27 avril 2006 à 23:09:39

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

lami20j, le jeudi 27 avril 2006 à 23:28:10

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

Goku, le vendredi 28 avril 2006 à 09:33:20

GENIALLLL!
Merci Potos!

Répondre à Goku

11

Goku, le vendredi 28 avril 2006 à 10:03:39

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

 lami20j, le vendredi 28 avril 2006 à 10:47:41

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

Goku, le vendredi 28 avril 2006 à 10:34:07

....il faut remplacer le .* par \$\$$e(.*) dans le dernier sed...

ça marche hyper bien!

Répondre à Goku
Les variables avec Perl Concept de variable avec Perl Une variable est un objet repéré par son nom, pouvant contenir des données, qui pourront être modifiées lors de l'exécution du programme. Les variables en langage Perl peuvent être de trois... www.commentcamarche.net/contents/perl/perlvar.php3
Executer script perl sous windows Bonjour, svp, je vx savoir, cmt je peux executer des scripts perl sous windows. merci d'avance www.commentcamarche.net/forum/affich-6083797-executer-script-perl-sous-windows
[perl]Variable avant et après "use strict;&qu Bonjour, voilà j'ai un script perl auquelle je veu ajouter une fonction de création de base de donnée suivant un utilisateur... la variiable $user1 est valide dans la 1er partie du script mais pas dans la 2de... (use strict;)... donc voilà mon bute... www.commentcamarche.net/forum/affich-2106570-perl-variable-avant-et-apres-use-strict-qu
[Bash] La variable d'environnement PATHLa variable d'environnement PATH I. Préambule II. C'est quoi le shell ? III. Définition IV. Séance de dissection V. Ajouter un répertoire à la variable PATH VI. Et puis... I. Préambule Sous les systèmes GNU/Linux qu'on le veuille ou... www.commentcamarche.net/faq/sujet-3585-bash-la-variable-d-environnement-path
[Shell] Tester une variable numériqueTester une variable numérique    Préambule Dans un environnement "shell", les variables sont, par défaut, de type "chaîne de caractères". De ce fait il n'est pas possible de déclarer une variable de type "entier" (enfin, ceci n'est pas tout à... www.commentcamarche.net/faq/sujet-4605-shell-tester-une-variable-numerique
Comment récupérer le résultat d'une commande dans une variableComment récupérer le résultat d'une commande dans une variable Préambule Syntaxe Exemples Préambule Il est bien souvent nécessaire de récupérer le résultat d'une commande (ou de son code retour) dans une variable afin de pouvoir... www.commentcamarche.net/faq/sujet-5030-comment-recuperer-le-resultat-d-une-commande-dans-une-variable
Perl variable inc (Résolu)Bonjour, lorsque je fais un push(@INC,"./modules"); le chemin du module n'est pas trouvé ni ajouté dans INC et si je mets le chemin complet (C:\Documents and Settings\sabrinab\My Documents\PM\modules) il n'est pas rajouté dans INC non plus si je fais... www.commentcamarche.net/forum/affich-11570998-perl-variable-inc
[PERL] Tester le contenu d'une variableBonjour, Comment puis-je tester le contenu d'une variable en perl ? $mavar="tototata"; si $mavar contient "to" alors.... Merci Soyez indulgents je débute :-) www.commentcamarche.net/forum/affich-5523428-perl-tester-le-contenu-d-une-variable
[Perl & CGI] Envoi de variable sur perlBonjour, J ai un tit soucis concernant un script en perl. Deja le perl et moi ca fait deux mais je voudrai trouver un moyen de faire un interface, genre un formulaire en cgi, qui va envoyer la variable entree dans le "text box" vers mon script perl et... www.commentcamarche.net/forum/affich-3215839-perl-cgi-envoi-de-variable-sur-perl
Perl - Les fichiersLa notion de filehandle On appelle filehandle (traduisez descripteur de fichier), dans un programme Perl, le nom permettant de manipuler une connexion d'entrée-sortie (les entrées-sorties standards vues précédemment sont connues par les filehandles... www.commentcamarche.net/contents/perl/perlfich.php3
Javascript - Les variablesLe concept de variable Une variable est un objet repéré par son nom, pouvant contenir des données, qui pourront être modifiées lors de l'exécution du programme. En Javascript, les noms de variables peuvent être aussi long que l'on désire,... www.commentcamarche.net/contents/javascript/jsvar.php3
Variables d'environnementVariables d'environnement Une variable d'environnement est une valeur dynamique, chargée en mémoire, pouvant être utilisée par plusieurs processus fonctionnant simultanément. Sur la plupart des systèmes d'exploitation, les emplacement de certaines... www.commentcamarche.net/contents/systemes/variables-environnement.php3