Perl et Variable
Fermé
Goku
-
27 avril 2006 à 11:30
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 28 avril 2006 à 10:47
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 28 avril 2006 à 10:47
A voir également:
- Perl et Variable
- Denon perl pro test - Accueil - Audio
- Le fichier contient un programme écrit en python. le programme construit un mot secret mais il ne l'affiche pas. modifiez ce programme afin que à chaque itération de la boucle : la variable a augmente de 2 la variable b diminue de 1 ajoutez une instruction pour faire afficher le mot secret construit. quel est ce mot secret ? ✓ - Forum Python
- Msgbox vba variable ✓ - Forum VB / VBA
- Ce programme est écrit en python. il construit un mot secret dans une variable mais il ne l'affiche pas. modifiez-le pour qu'il affiche le mot secret. exécutez-le. quel est ce mot secret ✓ - Forum Python
12 réponses
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
27 avril 2006 à 13:40
27 avril 2006 à 13:40
Salut,
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
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.
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
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
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
27 avril 2006 à 15:27
27 avril 2006 à 15:27
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
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
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...
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...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
27 avril 2006 à 16:55
27 avril 2006 à 16:55
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
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
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
27 avril 2006 à 22:55
27 avril 2006 à 22:55
Re,
Le script
Le fichier var.txt
Si ça ne te convient pas comme ça ou tu essaies de modifier le script ou tu fait un signe.
lami20j
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=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
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
27 avril 2006 à 23:09
27 avril 2006 à 23:09
Re,
A ajouter à la fin de script si tu veux que le fichier resultat.txt devient param.txt
A ajouter à la fin de script si tu veux que le fichier resultat.txt devient param.txt
rename 'resultat.txt','param.txt';lami20j
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
27 avril 2006 à 23:28
27 avril 2006 à 23:28
Re,
Pour encore reduire la saisie et rendre la ligne
Si tu veux l'écrire come une boucle while tu peux faire comme ça
lami20j
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
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....
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....
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
28 avril 2006 à 10:47
28 avril 2006 à 10:47
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
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