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 :

Unilignes perl pour nos sources [Sources]


Sujet :

Langage Perl

  1. #21
    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
    Le bug, c'est que si on sélectionne la dernière colonne et qu'on la place avant la fin, les lignes seront coupées en deux. Et même si on la met en dernier, comme dans le fichier d'origine, on aura une ligne vide sur deux.
    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

  2. #22
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    modification effectuée dans les sources. C'est ok pour toi ?

  3. #23
    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
    Oui, ça me semble parfait. Par contre, j'ai pas refait d'essai... Il aurait été intéressant dans l'article de mettre un exemple de csv
    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

  4. #24
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    Je ne suis pas contre un autre exemple de csv. Si tu en as un sous la main, met le sur ce fil et je le rajoute dans la source.

  5. #25
    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
    En fait, c'est OK, j'ai récupéré le fichier de test avec un copier/coller et je l'ai testé avec la dernière colonne en premier : tout baigne (et il y avait bien un bug).
    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

  6. #26
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    Citation Envoyé par Philou67430 Voir le message
    En fait, c'est OK, j'ai récupéré le fichier de test avec un copier/coller et je l'ai testé avec la dernière colonne en premier : tout baigne (et il y avait bien un bug).

  7. #27
    Membre chevronné

    Homme Profil pro
    Responsable projets techniques
    Inscrit en
    Février 2003
    Messages
    980
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable projets techniques
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Février 2003
    Messages : 980
    Points : 1 894
    Points
    1 894
    Par défaut
    Citation Envoyé par Philou67430 Voir le message
    Q/R : Comment afficher des colonnes particulières depuis un fichier de type xsv (tableau texte) ?
    Chapitres : Traitement de fichiers
    Testé sous : Linux, Windows

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    perl -ne 'print join " ", @{[ split /;/ ]}[8,0]' fichier.csv
    Dans ce code, l'expression régulière du split constitue le séparateur de colonne du fichier d'entrée passé en paramètre (le retour à la ligne est considéré comme le séparateur de ligne).
    Les colonnes affichées dans l'exemple sont les colonnes d'indice 8 et 0, dans cet ordre. Elles sont affichées avec le paramètre du join comme séparateur.
    Hello,

    Je viens de tomber sur ce sujet, et je vais peut-être dire une bêtise, mais pourquoi ne pas utiliser l'option "-a" dans ce cas ? Est-ce parce qu'elle n'est pas disponible partout ?

    Avec l'exemple cité, ceci semble fonctionner (tout du moins sous Linux) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    perl -naF';' -e 'print "$F[8] $F[0]\n"' fichier.csv

  8. #28
    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
    Tout bonnement parce que je ne connaissais pas ces options -a et -F

    Il faut naturellement utiliser ces options qui simplifient l'uniligne d'origine :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    perl -naF';' -e 'chomp;print join qq( ), @F[8,0], $/' fichier.csv
    En attente d'un essai, je remet chomp qui, d'après la doc, n'est pas fait par l'option -a.
    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

  9. #29
    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
    En fait, c'est plus compliqué que cela, le chomp n'est pas fait, et l'introduire sur $_ ne fonctionne pas : il faut le faire sur $F[$#F], ce qui alourdit légèrement l'uniligne (il serait logique que -a fasse le chomp).

    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    perl -naF';' -e 'chomp($F[$#F]);print join qq( ), @F[8,0], $/' fichier.csv
    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

  10. #30
    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
    Au final, l'option -l nous sauve la vie, et fait le chomp avant que l'option -a découpe l'entrée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    perl -nlaF';' -e 'print join qq( ), @F[8,0], $/' fichier.csv
    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

  11. #31
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    -l permet le traitement automatique des fins de ligne. Cette option a deux effets :

    Utilisée avec -n ou -p, elle fait automatiquement un chomp au début de la boucle implicite.

    Elle affecte à $\ (le séparateur d'enregistrements en sortie) le caractère dont la valeur octale a été passée. Si aucune valeur octale n'est donnée, l'option met $\ à la valeur courante de $/.

    Cette affectation $\ = $/ est faite au moment où l'option est rencontrée. Le séparateur d'enregistrements en entrée peut donc être différent du séparateur en sortie si l'option -l est suivie par l'option -0.

  12. #32
    Membre chevronné

    Homme Profil pro
    Responsable projets techniques
    Inscrit en
    Février 2003
    Messages
    980
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable projets techniques
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Février 2003
    Messages : 980
    Points : 1 894
    Points
    1 894
    Par défaut
    Effectivement, c'est dommage de devoir gérer ce chomp / saut de ligne, je n'y avais pas pensé !

    Je crois aussi qu'on peut utiliser $F[-1] pour le dernier élément d'un tableau (au lieu de $F[$#F]) ce que je trouve personnellement un peu plus parlant (et surtout, on peut aussi utiliser -2 -3... ).

    Mais là encore, je ne sais pas si c'est compatible partout !

  13. #33
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    On pourrait expliquer que le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    perl -nlaF';' -e 'print join qq( ), @F[8,0], $/' fichier.csv
    équivaut à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #!/usr/bin/perl
    $\ = $/;                            # option -l
    while (<>) {                        # option -n
      chomp $_;                         # options -l et -n
      @F = split /;/;                   # option -a et -F
      print join qq( ), @F[8,0], $/;    # option -e
    }
    Qu'en pensez-vous ?

  14. #34
    Membre chevronné

    Homme Profil pro
    Responsable projets techniques
    Inscrit en
    Février 2003
    Messages
    980
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable projets techniques
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Février 2003
    Messages : 980
    Points : 1 894
    Points
    1 894
    Par défaut
    ça peut être une bonne chose

  15. #35
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    sinon petit bug :
    Code csv : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    col0;col1;col2;col3;col4;col5;col6;col7;col8;col9;col10
    test1;test2;test3;test4;test5;test6;test7;test8;test9;test10;test11

    Sous Windows
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    perl -nlaF';' -e "print join q(-), @F[8,0], $/" test.csv
    Résultat :
    col8-col0-

    test9-test1-

  16. #36
    Membre chevronné

    Homme Profil pro
    Responsable projets techniques
    Inscrit en
    Février 2003
    Messages
    980
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable projets techniques
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Février 2003
    Messages : 980
    Points : 1 894
    Points
    1 894
    Par défaut
    J'ai l'impression qu'avec l'option -l, il ne faut pas afficher le saut de lignes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    perl -nlaF';' -e 'print join qq( ), @F[8,0]' fichier.csv
    peut-être que perl ajoute automatiquement le print qui va bien à chaque itération ?

    (ton code donnait la même chose sous Linux djibril)

    Edit, bon, en fait, c'est exactement ce que fait $/ (que je ne connaissais pas )

  17. #37
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    Citation Envoyé par Alek-C Voir le message
    J'ai l'impression qu'avec l'option -l, il ne faut pas afficher le saut de lignes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    perl -nlaF';' -e 'print join qq( ), @F[8,0]' fichier.csv


    Je modifierais qq{ } en q{ }. Il n'y a pas d'interpolation, donc qq est inutile.

  18. #38
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    Alek-C, je t'ajoute dans les auteurs des sources . Tes futurs propositions sont les bienvenues.

  19. #39
    Membre chevronné

    Homme Profil pro
    Responsable projets techniques
    Inscrit en
    Février 2003
    Messages
    980
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable projets techniques
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Février 2003
    Messages : 980
    Points : 1 894
    Points
    1 894
    Par défaut
    Citation Envoyé par djibril Voir le message
    Alek-C, je t'ajoute dans les auteurs des sources . Tes futurs propositions sont les bienvenues.
    Oula, faut pas s'emballer, j'ai carrément pas le niveau en perl ! Je suis tombé sur ce sujet par hasard, et par hasard aussi, j'ai découvert le -a (je cherchais le moyen de faire un traitement à la fin d'un perl -ne... pour vider un buffer ) :p

    Plus sérieusement, c'est avec plaisir que je penserais à ce topic, j'utilise souvent des petits scripts perl pour éviter de jongler entre les différentes versions de sed/awk/grep qu'on trouve selon les OS, et si certains me semblent utiles, je viendrais les soumettre ici sans problème ! Par contre, il y aura sans doute des retouches à faire

  20. #40
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184

Discussions similaires

  1. Réponses: 1
    Dernier message: 16/06/2011, 09h08
  2. Réponses: 3
    Dernier message: 16/09/2003, 13h04
  3. Réponses: 3
    Dernier message: 02/09/2002, 18h49
  4. [réseaux] Bench en Perl pour avoir le débit entre 2 pc
    Par Frich dans le forum Programmation et administration système
    Réponses: 4
    Dernier message: 22/05/2002, 17h22

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