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. #1
    Responsable Perl et Outils

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

    Informations forums :
    Inscription : avril 2004
    Messages : 19 799
    Points : 499 036
    Points
    499 036
    Par défaut Unilignes perl pour nos sources
    Bonjour,

    Perl offre la possibilité de lancer en une ligne de commande un traitement de fichiers ou toutes autres actions. Cela s'appelle traditionnellement des unilignes Perl. Elles nous permettent d'éviter de faire un programme et en même temps de profiter des avantages du langage perl. Cela revient à lancer des commandes à la Linux/Unix mais en perl et sur toutes les plate-formes.

    Je vous propose que l'on rajoute dans nos sources de la rubrique perl un paragraphe dédié aux unilignes perl afin de faire profiter tout le monde. Mais pour pour cela, il me faudrait la participation de tout le monde car des unilignes, on peut en écrire des centaines. Faites donc vos propositions dans ce topic, et je les rajouterais dans nos sources.

    Afin que les codes soient le plus clairs pour le grand public, je vous propose de rédiger vos propositions de la façon suivante (ceci est un exemple) :

    Q/R : Comment supprimer les ^M dans un fichier pour le rendre compatible Unix/Mac/Linux/Windows ?
    Chapitres : Traitement de fichiers
    Testé sous : Linux, Windows, MAC OS X

    perl -pi.bak -e "s/\r\n/\n/" mon_fichier.txt

    Ce code fait une sauvegarde préalable du fichier et supprime les ^M de mon_fichier.txt.

    perl -pi -e "s/\r\n/\n/" mon_fichier.txt.

    Fait la même chose sans sauvegarde.
    Comme vous pouvez le constater, je souhaiterais que chacun puisse nous donner le
    1. nom de la question (Q/R),
    2. chapitre dans lequel la question sera mise, car cela me permettra de sectionner les unilignes par chapitres (réseaux, fichiers, modules, BD, etc),
    3. système d'exploitation sous lequel le code a été testé. Cela permet de garantir que le code est fonctionnel sur certains OS.
    4. La réponse à la question () si possible commentée,


    Bien évidemment, vos nom de profil seront associé à vos codes gracieusement fournis.

    Merci d'avance pour vos participations, et n"hésitez pas si vous avez d'autres idées ou remarques sur ce sujet.

  2. #2
    Responsable Perl et Outils

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

    Informations forums :
    Inscription : avril 2004
    Messages : 19 799
    Points : 499 036
    Points
    499 036
    Par défaut
    La première uniligne dans nos sources : ici.

    A vos claviers !!!

  3. #3
    Responsable Perl et Outils

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

    Informations forums :
    Inscription : avril 2004
    Messages : 19 799
    Points : 499 036
    Points
    499 036
    Par défaut
    Je vois que ça passionne les foules !!

  4. #4
    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 : 55
    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
    "Quand un arbre tombe, on l'entend ; quand la forêt pousse, pas un bruit."

    ... patience, le sujet m'intéresse
    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

  5. #5
    Responsable Perl et Outils

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

    Informations forums :
    Inscription : avril 2004
    Messages : 19 799
    Points : 499 036
    Points
    499 036
    Par défaut
    Citation Envoyé par Philou67430 Voir le message
    "Quand un arbre tombe, on l'entend ; quand la forêt pousse, pas un bruit."

    ... patience, le sujet m'intéresse

  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 : 55
    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
    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.
    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
    Responsable Perl et Outils

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

    Informations forums :
    Inscription : avril 2004
    Messages : 19 799
    Points : 499 036
    Points
    499 036
    Par défaut


    Par contre attention Philou, cette commande fonctionne sous Windows uniquement avec cygwin . Mais sans cygwin, il faudra l'adapter avec qq, donc je te propose de l'adapter en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    perl -ne "print join qq{ }, @{[ split /;/ ]}[8,0],qq{\n}" fichier.csv
    Avec un petit exemple

    Code : 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
    qui donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    col8 col0
    test9 test1
    ça te va ?

  8. #8
    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 : 55
    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
    Ca me convient... je vais d'ailleurs essayer de prendre l'habitude d'utiliser " pour mes unilignes sous cygwin et Linux
    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. #9
    Responsable Perl et Outils

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

    Informations forums :
    Inscription : avril 2004
    Messages : 19 799
    Points : 499 036
    Points
    499 036
    Par défaut
    unilignes à jours dans nos sources avec 5 questions/réponses

  10. #10
    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 : 55
    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 la bonne indexation des moteurs de recherche, il peut être intéressant de remplacer xsv par csv ou tsv, qui sont des extensions connues.
    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. #11
    Responsable Perl et Outils

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

    Informations forums :
    Inscription : avril 2004
    Messages : 19 799
    Points : 499 036
    Points
    499 036
    Par défaut
    ça marche, je les rajouterais dans les mots clés de la questions

  12. #12
    Responsable Perl et Outils

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

    Informations forums :
    Inscription : avril 2004
    Messages : 19 799
    Points : 499 036
    Points
    499 036
    Par défaut
    C'est fait !!

  13. #13
    Responsable Perl et Outils

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

    Informations forums :
    Inscription : avril 2004
    Messages : 19 799
    Points : 499 036
    Points
    499 036
    Par défaut
    Nouvelle question : Utilise-t-on des simples ou double quote dans les unilignes ?

    Toute suggestion ou correction est la bienvenue.

  14. #14
    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 : 55
    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
    Attention, sous unix (et cygwin), on ne peux pas utiliser des quotes simples pour délimiter des chaines non interprétables dans un uniligne défini avec des quotes simples.

    Ainsi, pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    perl -e '$pseudo = 'djibril'; print $pseudo;'
    ça fonctionne car la chaine djibril ne contient aucun caractère interprétable du shell. En revanche, ça ne fonctionne plus dès lors qu'on utilise :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    perl -e '$pseudo = 'djibril'; print 'pseudo' ;'
    ou encore

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    perl -e '$pseudo = 'djibril'; print '$pseudo=', $pseudo, "\n";'
    Si l'on utilise la quote simple pour l'uniligne, il faut impérativement utiliser q() pour définir des chaines litérales non interprétables :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    perl -e '$pseudo = q(djibril); print q($pseudo=), $pseudo, "\n";'
    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

  15. #15
    Responsable Perl et Outils

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

    Informations forums :
    Inscription : avril 2004
    Messages : 19 799
    Points : 499 036
    Points
    499 036
    Par défaut
    La réponse a été mise à jour. Merci Philou67430.

  16. #16
    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 : 55
    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
    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

  17. #17
    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 : 55
    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
    Dans cet uniligne, il faudrait ajouter un chomp en première instruction et remplacer qq{\n} par $/ (séparateur de ligne).
    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

  18. #18
    Responsable Perl et Outils

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

    Informations forums :
    Inscription : avril 2004
    Messages : 19 799
    Points : 499 036
    Points
    499 036
    Par défaut
    Ce qui donne ceci ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    perl -ne "chomp, print join qq{ }, @{[ split /;/ ]}[8,0],$/" fichier.csv
    c'est ça ?

  19. #19
    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 : 55
    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
    j'aurais plutôt mis un ;

    Code DOS : Sélectionner tout - Visualiser dans une fenêtre à part
    perl -ne "chomp; print join qq{ }, @{[ split /;/ ]}[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

  20. #20
    Responsable Perl et Outils

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

    Informations forums :
    Inscription : avril 2004
    Messages : 19 799
    Points : 499 036
    Points
    499 036
    Par défaut
    Oui pardon, tu as raison. bon, je corrige.

Discussions similaires

  1. Réponses: 1
    Dernier message: 16/06/2011, 10h08
  2. Réponses: 3
    Dernier message: 16/09/2003, 14h04
  3. Réponses: 3
    Dernier message: 02/09/2002, 19h49
  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, 18h22

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