IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Perl Discussion :

problème ouverture filehandle source


Sujet :

Langage Perl

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    195
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2013
    Messages : 195
    Points : 121
    Points
    121
    Par défaut problème ouverture filehandle source
    Bonjour,

    j'essaye de faire un script pour passer plusieurs fichiers en arguments pour qu'ils soit modifié et le tout mis dans un seul fichier.

    les fichiers sont bien lu et on voit la modification défiler à l'écran mais j'ai toujours un message comme quoi il ne peut pas ouvrir la variable source pour le filehandle.

    Le fait d'avoir plusieurs arguments poserait problème? Une idée ?

    Merci

    use strict;
    use warnings;
    use feature 'say';


    my @array = <>; #lis le contenue des arguments et les place dans @array

    my $source = join " ", @array; #concatène les listes reçu précédemment pour les mettres dans un seul fichier variable

    my $fichier_dst = "fichier_multiple.txt"; #chemin et nom du fichier de sortie suite substitution

    #Ouvre le fichier source et le place dans un filehandle pour traitement.
    open (my $fh_src, '<', $source) or die "impossible d'ouvrir le fichier '$source' en lecture";

    #ouvre un filehandle pour le fichier destination pour traitement à venir.
    open (my $fh_dst, '>', $fichier_dst) or die "impossible d'ouvrir le fichier '$fichier_dst' en écriture";

    while (my $ligne = <$fh_src>) #Obligé de déclarer une nouvelle varialbe (ici $ligne) qui fera partie que de la boucle while donc il faut lui transmettre le contenue de la variale $fh_src
    {
    $ligne =~ s/,/;/g; # remplace les virgules par point virgule dans le fichier lu.
    say $ligne; # vérifie la substitution en affichant la variable après modification.
    print $fh_dst $ligne; # met le résultat de $ligne dans la variable $fh_dst qui sera dans le fichier de copie.
    }

    close $fh_src;
    close $fh_dst;

  2. #2
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2013
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2013
    Messages : 247
    Points : 406
    Points
    406
    Par défaut
    Je suis pas sûr d'avoir compris ce que tu veux
    Si tu souhaites juste ouvrir, traiter les lignes des fichiers donnés en argument et les mettre dans un fichier de sortie alors tu peux faire comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    my $fichier_dst = "fichier_multiple.txt";
    open (FH_OUT, '>', $fichier_dst);
     
    foreach my $a (@ARGV){    #Les arguments sont deja sous la forme que tu souhaites
        open(FH_IN, $a);
        while (<FH_IN>){
            my $ligne = $_;
            $ligne =~ s/,/;/g;
            print FH_OUT $ligne;
        }
        close(FH_IN);
    }
    close(FH_OUT);

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    195
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2013
    Messages : 195
    Points : 121
    Points
    121
    Par défaut
    Merci ca fonctionne du premier coup ...tu avais bien compris l'idée

    Ca va donner matière à regarder et analyse.

    En fait ton script prend le premier argument avec foreach, le lis, le traite avec while et une fois finis passe au second argument, etc ?

    l'idée de concaténer les fichiers n'est pas bonne en soit dans ce cas la ?

  4. #4
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 469
    Points
    12 469
    Billets dans le blog
    1
    Par défaut
    Le point important est que les arguments passés au programme figurent dans le tableau @ARGV.

  5. #5
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    195
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2013
    Messages : 195
    Points : 121
    Points
    121
    Par défaut
    Ca commence à devenir plus clair tout ca

    merci

  6. #6
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Pour faire plus simple, et dans l'esprit du script initialement posté, tu peux utiliser l'opérateur <> qui lit l'ensemble des lignes de tous les fichiers passés en argument (ceux dont le nom se trouve aussi dans @ARGV), pour traiter toutes ces lignes. Le script de 6ril23 devient donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    my $fichier_dst = "fichier_multiple.txt";
    open (FH_OUT, '>', $fichier_dst);
     
    while (<>){
      my $ligne = $_;
      $ligne =~ s/,/;/g;
      print FH_OUT $ligne;
    }
    close(FH_OUT);
    Ce qui peut aussi se transformer facilement en uniligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    perl -pe 's/,/;/g' fichier_in*.txt >fichier_out.txt
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  7. #7
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    195
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2013
    Messages : 195
    Points : 121
    Points
    121
    Par défaut
    Effectivement au début je voulais faire simple en capturant tout dans <> et traiter ligne par ligne mais ca ne marchait pas.

    j'ai du compliqué inutilement en ouvrant un filehandle source.

    ton exemple est plus simple et fonctionne aussi.

    C'est à se demander pourquoi complexifier avec @ARGV au final

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VBA]Problème ouverture - copie fichers de plusieurs sources
    Par kullervo dans le forum Général VBA
    Réponses: 9
    Dernier message: 27/04/2007, 11h22
  2. Problème ouverture form à partir d'une var
    Par priest69 dans le forum Access
    Réponses: 1
    Dernier message: 29/11/2005, 12h21
  3. problème ouverture fichier texte
    Par ice-t69 dans le forum Langage
    Réponses: 4
    Dernier message: 07/11/2005, 19h29
  4. Problème ouverture fichier par double clic...
    Par sankookai dans le forum MFC
    Réponses: 4
    Dernier message: 11/05/2005, 09h13
  5. Problème ouverture logiciel de messagerie
    Par David M dans le forum Access
    Réponses: 2
    Dernier message: 11/10/2004, 19h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo