Forum Programmation.perl sortie sur plusieurs fichiers

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
-3
26
oct.
2015

salut a tous j'ai encore une question concenant les fichiers de sortie que j'aimerai a l'aide de mon perl-Script produire
ligne 2 le nom que doit porter mon fichier
ligne 3 le nom est ecrit sur le fichier et la valeur du parametre
ligne 6 nom des donnees et leurs valeurs sont ecrit sur le fichier.

quelqu'un ici peut il m'aider?

1    for my $k (keys %{$data}) {
2      print  "----$k----\n"; # le nom que porte mon fichier 
3      print  "$k: $param->{$k}\n"; # ecrit le nom dans le fichier et la valeur du parametre
4      for my $i (0.. $#{$data->{$k}}) {
5        if ($param->{$k} ne $data->{$k}->[$i]->[1]) {
6          print  "$data->{$k}->[$i]->[0]: $data->{$k}->[$i]->[1]\n"; # noms des data et leurs valeurs
7        }
8      }
  • # Les jours défilent…

    Posté par  (site web personnel) . Évalué à 6.

    …et ce malheureux livre de Perl prend toujours la poussière. :(

  • # au hasard en reprenant les posts precedents, on trouve ...

    Posté par  . Évalué à 3.

    dans les posts precedents on a vu comment ecrire dans un fichier

    open $FH,>,"lechemin/vers/le/fichier";
    print $FH "données à ecrire dans le fichierA";

    on a vu comment recuperer le nom d'un fichier dans une variable ($file) pour l'utiliser ensuite.

    là dans ton cas $file est remplacé par $k mais la logique reste la meme

    my $k="lechemin/vers/le/fichier";
    open $FH,>,$k;
    print $FH "données à ecrire dans le fichierA";

    je te laisse comment integré cela dans ta boucle ;)

    • [^] # Re: au hasard en reprenant les posts precedents, on trouve ...

      Posté par  . Évalué à -6.

      par alleur je sais bien comment creer les fichiers.

      dans ce cas il ya plusieurs fichiers qui doivent etre cree. et chaque fichier porte un nom different et des donnes differentes.

      je pourrai juste dire que ca l'air facile mais c'est ne marche pas.

      • [^] # Re: au hasard en reprenant les posts precedents, on trouve ...

        Posté par  . Évalué à 2. Dernière modification le 27 octobre 2015 à 08:08.

        Soit on a mal compris quelque chose, soit la solution est presque indiquée dans le post précédent.

        Tu as juste à intégrer ce bout de code dans ta boucle (en n'oubliant pas de fermer le fichier ou tu risques de te retrouver avec des fichiers vides).

        Il te suffit juste d'ajouter un tableau, ou un hash contenant les handlers de fichiers que tu as ouvert à la place de $FH.

        • [^] # Re: au hasard en reprenant les posts precedents, on trouve ...

          Posté par  . Évalué à -5.

          Merci bien de votre aide:
          la solution

          for my $k ( keys %{$data} ) {
              if ( open( $fhout, '>', "$k.csv" ) ) {
                  print $fhout "----$k----\n";    
                  print $fhout "$k: $param->{$k}\n";  
                  for my $i ( 0 .. $#{ $data->{$k} } ) {
                      if ( $param->{$k} ne $data->{$k}->[$i]->[1] ) {
          
                          print $fhout "$data->{$k}->[$i]->[0]: $data->{$k}->[$i]->[1]\n";   
                      }
                  }
              }
              else {
                  warn "FEHLER ($!) bei Datei $k.csv";
              }
          }
  • # je vais faire mon enquiquineur

    Posté par  . Évalué à 3.

    mais parcourir les clés d'une map pour ensuite l'utiliser pour accéder à la valeur me semble pas du plus efficient ;)

    on a une syntaxe bénie pour ça :

    while ( my ($key, $value) = (each %hash) ){
    }

    Je te laisse évidemment adapter à ton cas :)

    Il ne faut pas décorner les boeufs avant d'avoir semé le vent

    • [^] # Re: je vais faire mon enquiquineur

      Posté par  . Évalué à 2.

      D'un autre côté, faut faire attention avec each parfois : faut s'assurer que le même hash n'est pas reparcouru à l'intérieur de la boucle, ou dans un appel de fonction à l'intérieur de la boucle, sous peine d'avoir des surprises. Faut aussi éviter d'ajouter ou supprimer de nouvelles clés à l'intérieur de la boucle (sauf la clé courante comme exception). Du coup, parfois utiliser keys est plus reposant.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.