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 :

concaténer/fusioner deux fichiers text en perl


Sujet :

Langage Perl

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 158
    Points : 80
    Points
    80
    Par défaut concaténer/fusioner deux fichiers text en perl
    Bonjour,

    J'ai besoin de fusionner deux fichiers texte (fichier A et fichier B) dans mon programme perl.


    Pour l'instant je procède de la facon suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    my fichier_A="/home/user/fichierA.txt";
    my fichier_B="/home/user/fichierB.txt";
    my fichier_C="/home/user/fichierC.txt";
     
    system ("cat $fichier_A $fichier_B > $fichier_C");
    Y'a a t'il une facon de faire cela à partir de fonctions perl et non à partir de binaires bash comme je le fais?
    Comme ca mon code serait portable sur windows...

    merci

  2. #2
    Membre éprouvé Avatar de Gardyen
    Homme Profil pro
    Bio informaticien
    Inscrit en
    Août 2005
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bio informaticien

    Informations forums :
    Inscription : Août 2005
    Messages : 637
    Points : 1 050
    Points
    1 050
    Par défaut
    un print OUT $_ en lisant chaque fichier, une concaténation de tableaux avec toutes les lignes (gare à la mémoire ), directement depuis la ligne de commande, ...

    il y a plusieurs façons de faire, à toi de voir ce que tu veux !
    Nous les geeks, c'est pas qu'on a une case en moins, c'est juste qu'on compte à partir de zéro.
    Plus les choses changent, plus elles restent les mêmes

  3. #3
    Membre confirmé
    Avatar de cmcmc
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 316
    Points : 641
    Points
    641
    Par défaut
    Citation Envoyé par leon1983 Voir le message
    Bonjour,

    J'ai besoin de fusionner deux fichiers texte (fichier A et fichier B) dans mon programme perl.


    Pour l'instant je procède de la facon suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    my fichier_A="/home/user/fichierA.txt";
    my fichier_B="/home/user/fichierB.txt";
    my fichier_C="/home/user/fichierC.txt";
     
    system ("cat $fichier_A $fichier_B > $fichier_C");
    Y'a a t'il une facon de faire cela à partir de fonctions perl et non à partir de binaires bash comme je le fais?
    Comme ca mon code serait portable sur windows...

    merci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    {
        open my $out, ">", $fichier_C or die "impossible d'ouvrir $fichier_C en écriture: $! ($^E)";
        {
            local @ARGV = ($fichier_A, $fichier_B);
            while (<>) {
    	    print $out $_
    	}
        }
        close $out or die "erreur d'écriture sur $fichier_C: $! ($^E)";
    }
    Quelques explications sur local @ARGV ici, et sur $^E ici (utile sous Windows).
    Sauf indication contraire tous les codes que je présente sont utilisables et testés (mais sans garantie d'aucune sorte)
    J'apporte beaucoup de soin à la rédaction de mes posts et apprécie les retours donc merci de s'il vous paraissent pertinents ou utiles
    Lazyness, Impatience and Hubris are good for you

  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
    Pas mal du tout l'utilisation de local @ARGV pour lire un ou plusieurs fichiers, l'idée ne m'était jamais venue. Mais je ne l'utiliserais que pour des petits scripts utilitaires, pas pour de vrais programmes pour lesquels je préfère tester que l'ouverture du fichier se fait correctement et obtenir, le cas échéant, un message d'erreur explicite. +1.

  5. #5
    Membre confirmé
    Avatar de cmcmc
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 316
    Points : 641
    Points
    641
    Par défaut
    Citation Envoyé par Lolo78 Voir le message
    Pas mal du tout l'utilisation de local @ARGV pour lire un ou plusieurs fichiers, l'idée ne m'était jamais venue. Mais je ne l'utiliserais que pour des petits scripts utilitaires, pas pour de vrais programmes pour lesquels je préfère tester que l'ouverture du fichier se fait correctement et obtenir, le cas échéant, un message d'erreur explicite. +1.
    Merci En fait ça génère systématiquement un message d'erreur explicite:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Taisha:~/tttmp/localargv $ perl -e '<>' foobar
    Can't open foobar: No such file or directory at -e line 1.
    Taisha:~/tttmp/localargv $
    Mais effectivement ce n'est qu'un warning:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Taisha:~/tttmp/localargv $ perl -e 'print while <>' A B C D
    Can't open C: No such file or directory at -e line 1, <> line 2.
    A
    B
    D
    Taisha:~/tttmp/localargv $ cat A
    A
    Taisha:~/tttmp/localargv $ cat B
    B
    Taisha:~/tttmp/localargv $ cat D
    D
    Taisha:~/tttmp/localargv $
    donc si tu veux trapper l'erreur il faut jouer avec $SIG{__WARN__} et l'intérêt devient moins évident... Mais ça reste pratique pour travailler sur un nombre quelconque de fichiers d'entrée.
    Sauf indication contraire tous les codes que je présente sont utilisables et testés (mais sans garantie d'aucune sorte)
    J'apporte beaucoup de soin à la rédaction de mes posts et apprécie les retours donc merci de s'il vous paraissent pertinents ou utiles
    Lazyness, Impatience and Hubris are good for you

  6. #6
    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
    Ben, j'ai d'un côté de gros programmes de production, que je veux écrire dans les règles de l'art (en particulier il faut qu'ils s'arrêtent par exemple s'ils ne trouvent pas un fichier). D'un autre côté, comme je travaille sur de très gros volumes de données (gigaoctets et dizaines de gigaoctets, parfois même plus), quand j'ai une anomalie (par exemple des compteurs que ne se réconcilient pas comme il faudrait), ma seule solution pour investiguer est souvent de lancer de petits scripts Perl ou des unilignes sur les fichiers résultats ou en entrée pour essayer de trouver l'origine du problème (présence par exemple de doublons, de lignes vides, etc. dans les fichiers en entrée). Pour ce genre d'activité, faire un open dans les règles de l'art n'est pas forcément nécessaire: je verrai bien le problème si j'ai fait une faute de frappe dans le nom d'un fichier que je veux analyser. Dans ce cas, l'utilisation d'un local @ARGV peut me faire gagner du temps.

Discussions similaires

  1. Réponses: 9
    Dernier message: 12/07/2011, 17h25
  2. fusion de deux fichiers texte
    Par bahraoui dans le forum Développement de jobs
    Réponses: 5
    Dernier message: 13/01/2010, 12h56
  3. Fusion de deux fichiers texte
    Par Christinita dans le forum MATLAB
    Réponses: 4
    Dernier message: 14/12/2008, 15h30
  4. comparaison de deux fichiers textes
    Par chmaichel dans le forum Delphi
    Réponses: 1
    Dernier message: 28/07/2006, 11h35
  5. recherche dans un fichier texte en perl(débutant)
    Par Shyboy dans le forum Langage
    Réponses: 3
    Dernier message: 04/07/2006, 23h53

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