[Perl] foreach commande

Résolu/Fermé
Tyros - 20 sept. 2006 à 09:25
 tyros - 25 sept. 2006 à 13:36
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....
A voir également:

5 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
20 sept. 2006 à 12:09
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
1
blux Messages postés 26546 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 24 décembre 2024 3 319
20 sept. 2006 à 15:35
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 ?
1
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
20 sept. 2006 à 19:08
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
1
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Trop fort lamij! :D...Merci ça tabasse ton truc.
0