[Perl] foreach commande

Résolu
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....

5 réponses

  1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    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
  2. blux Messages postés 5032 Date d'inscription   Statut Modérateur Dernière intervention   3 455
     
    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
  3. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    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
  4. Tyros
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

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