[Perl] foreach commande
Résolu
Tyros
-
tyros -
tyros -
Salut à vous!
Je plante le décor.
J'ai un fichier pays.txt:
$$COUNTRY=DE;PT;CZ;RO
J'ai un fichier de paramétre:param.txt
$$COUNTRY=
J'ai une commande qui est capable de lire le fichier de parametre:ma_commande()
J'ai un script perl qui change la valeur de param.txt:
la commande s'écrit:
./change_param.pl pays.txt param.txt
et en résultat j'ai dans param.txt:
$$COUNTRY=DE;PT;CZ;RO
Le but est de parcourir le fichier pays.txt,mettre à jour param.txt et lancer successivement ma_commande pays par pays.
Le programme devrait faire ça:
je lis pays.txt
je récupere le premier pays 'DE'.
je lance change_param qui met à jour param.txt $$COUNTRY=DE
je lance ma commande ma_commande
etc...pour PT , CZ et RO.
C'est cette notion de boucle que je ne sais pas faire....
Je plante le décor.
J'ai un fichier pays.txt:
$$COUNTRY=DE;PT;CZ;RO
J'ai un fichier de paramétre:param.txt
$$COUNTRY=
J'ai une commande qui est capable de lire le fichier de parametre:ma_commande()
J'ai un script perl qui change la valeur de param.txt:
la commande s'écrit:
./change_param.pl pays.txt param.txt
et en résultat j'ai dans param.txt:
$$COUNTRY=DE;PT;CZ;RO
Le but est de parcourir le fichier pays.txt,mettre à jour param.txt et lancer successivement ma_commande pays par pays.
Le programme devrait faire ça:
je lis pays.txt
je récupere le premier pays 'DE'.
je lance change_param qui met à jour param.txt $$COUNTRY=DE
je lance ma commande ma_commande
etc...pour PT , CZ et RO.
C'est cette notion de boucle que je ne sais pas faire....
5 réponses
-
Salut,
je crois que tu peux le faire tout d'un coup.
je lis pays.txt
je récupere le premier pays 'DE'.
je lance change_param qui met à jour param.txt $$COUNTRY=DE
je lance ma commande ma_commande
etc...pour PT , CZ et RO.
je vois comme ça, mais je ne suis pas sûr si je n'ai pas les détails
je lis pays.txt
je récupere les pays
je met à jour param.txt
Ca sera mieux si tu peux afficher les codes que tu as.
ma_commande c'est quoi?
change_param.pl ?
Si on peut le faire avec un seul script, pourquoi pas?
A toi de voir. Peut être tu as tes raison.
A savoir que t'as commande tu peux l'utiliser depuis le script.
As-tu commencé un bout de code?
Pas forcémént foreach si un while sur un handle de fichier fait l'affaire.
A toi.
lami20j
P.S. foreach ce n'est pas une commande mais une instruction -
Tu peux éclater ta variable et la mettre dans un tableau avec split :
@PAYS = split(/;/,$$COUNTRY)
Ensuite, tu boucles sur ton tableau avec :
for $i (0..$#PAYS)
Ca irait ?
-
Re,
regarde ça et dit si ça te convient.#!/usr/bin/perl use warnings;use strict; my @pays; open F_PAYS,"pays.txt" or die "E/S : $!\n"; while ( <F_PAYS> ) { # je lit pays.txt s/(.*)/$1;/; # j'ajoute un ; à la fin pour créer @pays @pays = $_ =~ /(\w\w);/g;# je stocke les pays } # param.txt ne contient que $$COUNTRY= ?? # en ce cas je ne crois pas que tu as besoin de ce fichier # tu peux utiliser une variable # donc l'étape ./changer_param.pl pays.txt param.txt tu peux la sauter # my $param ='$$COUNTRY='; foreach (@pays){ system ("echo", "$param$_"); # tu remplaces echo avec ma_commande }
Et même sans variable#!/usr/bin/perl use warnings;use strict; my @pays; open F_PAYS,"pays.txt" or die "E/S : $!\n"; while ( <F_PAYS> ) { # je lit pays.txt s/(.*)/$1;/; # j'ajoute un ; à la fin pour créer @pays @pays = $_ =~ /(\w\w);/g;# je stocke les pays } # param.txt ne contient que $$COUNTRY= ?? # en ce cas je ne crois pas que tu as besoin de ce fichier # donc l'étape ./changer_param.pl pays.txt param.txt tu peux la sauter foreach (@pays){ system ("echo", '$$COUNTRY='."$_"); # tu remplaces echo avec ma_commande }lami20j -
Ma commande c'est vraiment spécifique, c'est pas utile de rentrer dans le détail:ce qui est important c'est que change_param.pl(script perl qui modifie dans param.txt et en prenant deux parametres, le fichier contenant le contenu de variable $$COUNTRY et le fichier param à mettre à jour) mette à jour la variable pour qu'à l'execution de ma_commande, il est la bonne variable pays.
J'ai essayé ça,
open VAR,pays.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 = <RES>;
my %h;
while (<VAR>){
--c'est ici que je sais pas comment découper par $$COUNTRY=DE;PT;RO; et mettre dans VAR successivement DE puis PT puis RO
print $$COUNTRY=DE; RES;
exec(./change_param.pl RES PARAM);
exec(ma_commande);
}
Merci Lamij -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -