[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....
A voir également:
- Perl foreach
- Denon perl pro test - Accueil - Audio
- Active perl - Télécharger - Édition & Programmation
- Perl et Variable - Forum Perl
- Syntaxe Foreach Copy-item - Forum PowerShell
- Problème d'affiche dans une Boucle Foreach - Forum C#
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
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 ?
@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.
Et même sans variable
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
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