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 :

lecture simple de fichiers formatés


Sujet :

Langage Perl

  1. #1
    Membre actif
    Inscrit en
    Novembre 2003
    Messages
    543
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 543
    Points : 239
    Points
    239
    Par défaut lecture simple de fichiers formatés
    J'avais l'habitude de lire des fichiers textes à l'aide de AWK.
    Dans ce langage, $0 est la ligne lue, $1 $2 ... sont les différents champs en fonction du séparateur défini dans la variable FS.
    Je voudrais faire la même chose en PERL
    Quelqu'un pourrait-il me dire comment définir le séparateur, comment accéder aux différents champs ?
    Merci d'avance
    Enicnath

  2. #2
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 852
    Points : 4 759
    Points
    4 759
    Par défaut
    Bonjour

    Un peu d'effort ! La FAQ et mes cours disent comment lire des fichiers textes.

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code ni le tag

    Je ne répond à aucune question technique par MP.

  3. #3
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut Re: lecture simple de fichiers formatés
    Citation Envoyé par enicnath
    J'avais l'habitude de lire des fichiers textes à l'aide de AWK.
    Dans ce langage, $0 est la ligne lue, $1 $2 ... sont les différents champs en fonction du séparateur défini dans la variable FS.
    Je voudrais faire la même chose en PERL
    Quelqu'un pourrait-il me dire comment définir le séparateur, comment accéder aux différents champs ?
    Merci d'avance
    Enicnath
    Dans le cadre d'unilignes, il est intéressant d'invoquer perl avec les options -a et -n (ou de les ajouter au shebang d'un script un peu plus long sur le même principe).

    -n ajoute une boucle implicite de lecture du fichier passé en paramètre ou de l'entrée standard, selon les redirections. $_ est remplis avec les lignes successives.

    -a active l'autosplit de la ligne $_ dans le tableau @F

    Bon courage.
    La FAQ Perl est par ici
    : La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !

  4. #4
    Membre actif Avatar de scaleo
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 327
    Points : 219
    Points
    219
    Par défaut
    Heu c'est quoi AWK ?
    Vista powaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ::

  5. #5
    Membre actif
    Inscrit en
    Novembre 2003
    Messages
    543
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 543
    Points : 239
    Points
    239
    Par défaut
    Citation Envoyé par GLDavid
    Bonjour

    Un peu d'effort ! La FAQ et mes cours disent comment lire des fichiers textes.

    @++
    Désolé, mais je n'ai pas réussi à comprendre comment obtenir quelque chose d'aussi simple qu'avec AWK (qui est tellement moins puissant que je ne peux plus l'utiliser).

    PS. pour ceux qui ne le connaissent pas, AWK est un 'vieux' langage UNIX qui sert à traiter des flots de textes.

  6. #6
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    En combinant split() et la lecture ligne à ligne (par l'opérateur <>) tu obtiens les mêmes fonctionnalités que Awk (en plus lisible, puisque les noms de variables ne sont pas imposés et que tu peux utiliser un tableau) en deux lignes de code (sans parler des options de la lignes de commande, qui te permettent effectivement de faire des unilignes à la puissance impressionante une fois maitrisées).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while( <> ){ 
        my @fields = split;
        #traitement
    }
    --
    Jedaï

  7. #7
    Membre actif
    Inscrit en
    Novembre 2003
    Messages
    543
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 543
    Points : 239
    Points
    239
    Par défaut
    J'ai fait le code suivant, il fonctionne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    open(FICHIER, "Lecture.cvs") || die ("problème !");
    while (<FICHIER>) {
       @Champs = split(';');
       $Annee=$Champs[0];
       $Dep=$Champs[1];
       $Valeur=$Champs[2];
    }
    Merci à tous

    PS. peut être peut -on marquer ce post comme "résolu"

  8. #8
    Membre actif
    Inscrit en
    Février 2005
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 167
    Points : 203
    Points
    203
    Par défaut
    Tu peux utiliser le switch -a pour autosplitter $_ dans le array @F. Au lieu de dire $1, tu diras $F[0], $2 devient $F[1] etc. etc.

    AWK est un langage assez chouette, écrit par Alfred Aho, Joseph Weinberg et Brian Kernighan. Le nom vient des initiales de leurs noms de famille. C'était une étude pour voir à quel point on pouvait combiner les capacités de sed et grep dans un seul programme.

    De ce point de vue, ils avaient réussi admirablement. Le grand peché d'awk est d'être trop orienté un-fichier-en-entrée, un-fichier-en-sortie. Mais si tel est le besoin, un programme en awk sera beaucoup plus rapide que l'équivalent en Perl. Mais Perl a beaucoup de richesses qui n'ont pas d'analogues en awk.

    Si tu veux partir d'awk vers perl, je peux conseiller le programme 'a2p' qui traduit awk en Perl. Mais attention, le résultat est ce que l'on obtient par traduction automatique. Ça fait du Perl qu'on dirait est passé par le Babelfish :)

    N

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

Discussions similaires

  1. Lecture d'un fichier formaté
    Par Theri dans le forum Débuter
    Réponses: 3
    Dernier message: 13/01/2010, 11h28
  2. lecture fichier formaté
    Par [Hugo] dans le forum Langage
    Réponses: 4
    Dernier message: 26/07/2007, 07h37
  3. Lecture simple de fichier XML en C/C++
    Par bigbear dans le forum MFC
    Réponses: 3
    Dernier message: 26/06/2006, 14h56
  4. Ifstream > Lecture d'un fichier > Format
    Par Zenol dans le forum SL & STL
    Réponses: 15
    Dernier message: 19/12/2005, 11h04
  5. Lecture simple de fichiers formatés
    Par enicnath dans le forum Général Python
    Réponses: 4
    Dernier message: 10/10/2005, 14h44

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