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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Responsable Perl et Outils

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    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 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    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 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    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 : 59
    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
    Par défaut
    "Quand un arbre tombe, on l'entend ; quand la forêt pousse, pas un bruit."

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

  5. #5
    Responsable Perl et Outils

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    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 : 59
    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
    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.

  7. #7
    Responsable Perl et Outils

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    Merci !

    Peux-tu me donner un exemplaire avec cette configuration :

    Q/R : TITRE DE LA QUESTION
    Chapitres : uniligne
    Testé sous : Linux, Windows, MAC OS X

    Un petit texte explicatif serait le bienvenu .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    alias d2h="perl -e 'printf qq|%X\n|, int( shift )'"
    alias d2o="perl -e 'printf qq|%o\n|, int( shift )'"
    alias d2b="perl -e 'printf qq|%b\n|, int( shift )'"
     
    alias h2d="perl -e 'printf qq|%d\n|, hex( shift )'"
    alias h2o="perl -e 'printf qq|%o\n|, hex( shift )'"
    alias h2b="perl -e 'printf qq|%b\n|, hex( shift )'"
     
    alias o2h="perl -e 'printf qq|%X\n|, oct( shift )'"
    alias o2d="perl -e 'printf qq|%d\n|, oct( shift )'"
    alias o2b="perl -e 'printf qq|%b\n|, oct( shift )'"

  8. #8
    Membre très actif

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

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

    Informations forums :
    Inscription : Février 2003
    Messages : 980
    Par défaut
    Désolé, je passe un peu moins souvent par ici en ce moment :s

    Q/R : Convertir rapidement des nombres entre les bases usuelles (binaire, octale, décimal et hexadécimale)
    Chapitres : uniligne
    Testé sous : Linux, Windows

    Les commandes suivantes permettent de réaliser rapidement des conversions d'une base vers une autre. Sous Linux, utiliser un alias est un bon moyen d'avoir toujours ça sous la main
    Pour l'explication, elles sont toutes sous le même format, donc je prends la première (ça vaut ce que ça vaut, vous pouvez reformuler ) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    > perl -e "printf qq|%X\n|, int( shift )" 12
    C
    printf réalise un print formaté
    qq|...| permet d'éviter l'utilisation des " parfois problématiques sous Windows ou dans les alias. Cette commande est équivalente à "..."
    %X\n indique à printf d'afficher le premier argument au format hexadécimal suivi d'un saut à la ligne
    int( shift ) est le premier et seul argument du printf (c'est ce qui sera utilisé pour valoriser le %X): shift prend le premier argument de la ligne de commande et int en ressort la valeur entière.

    Pour les autres exemples, c'est similaire sauf qu'on utilise une commande hex ou oct pour convertir le nombre passé en paramètre en décimal avant de l'afficher par printf.

    1. décimal > hexadécimal
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
       perl -e "printf qq|%X\n|, int( shift )"
    2. décimal > octal
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
       perl -e "printf qq|%o\n|, int( shift )"
    3. décimal > binaire
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
       perl -e "printf qq|%b\n|, int( shift )"
    4. hexadécimal > décimal
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
       perl -e "printf qq|%d\n|, hex( shift )"
    5. hexadécimal > octal
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
       perl -e "printf qq|%o\n|, hex( shift )"
    6. hexadécimal > binaire
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
       perl -e "printf qq|%b\n|, hex( shift )"
    7. octal > hexadécimal
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
       perl -e "printf qq|%X\n|, oct( shift )"
    8. octal > décimal
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
       perl -e "printf qq|%d\n|, oct( shift )"
    9. octal > binaire
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
       perl -e "printf qq|%b\n|, oct( shift )"


    Il est envisageable d'utiliser la version octal > * pour convertir du binaire ou de l'hexadécimal en spécifiant le type.
    Exemples :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    > perl -e "printf qq|%d\n|, oct( shift )" 0xA
    10
    > perl -e "printf qq|%d\n|, oct( shift )" 0b0110
    6
    A noter qu'il est possible, sous Linux, de les mettre en alias, par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    > alias d2h="perl -e 'printf qq|%X\n|, int( shift )'"
    > d2h 253
    FD

  9. #9
    Responsable Perl et Outils

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut

  10. #10
    Responsable Perl et Outils

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    Convertir rapidement des nombres entre les bases usuelles (binaire, octale, décimal et hexadécimale) Fait

  11. #11
    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
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Je reprends ici la réponse que j'ai faite à la question suivante (en modifiant un peu ma réponse pour que ça marche aussi dans une fenêtre MS-DOS).

    Question: Comment faire un uniligne qui permette de compter le nombre de mots et le nombre de phrases dans un morceau de texte passé en paramètre?

    Chapitre : unilignes
    Testé sous : Linux, HP-UX, Windows (MS-DOS)

    Voici une solution minimale qui marche pour compter le nombre de mots (marche sous Unix; sous Windows, remplacer les apostrophes par des guillemets):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ perl -e '$_ = shift; $wc = split; print qq/$wc\n/;' "ma phrase à compter"
    4
    Et une solution plus complète comptant les mots et les phrases:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    perl -e '$_ =shift; $wc = split /\s/; $pc = split /\./; print qq/ $wc mots\n $pc phrases\n/;' "ma phrase à compter. Ma deuxième phrase."
     7 mots
     2 phrases
    Version avec un echo et un pipe (donc, sous Unix uniquement):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ echo "les poules du couvent couvent." | perl -ne '$wc = split; print $wc, " mots \n";'
    5 mots
    Compter le nombre de mots pour chaque ligne d'un fichier, ici le fichier "essai.txt" (marche sous Unix, marche sous Windows toujours en remplaçant les apostrophes par des guillemets):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $ perl -ne '$wc = split; print qq/$. :  $wc \n/;' essai.txt
    1 :  12
    2 :  12
    3 :  11
    4 :  14
    5 :  4
    6 :  5
    7 :  0
    ...

  12. #12
    Membre chevronné 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
    Par défaut Comment ajouter du contenu fixe en début ou en fin de fichier
    Suite à cette discussion :

    Q/R : Comment ajouter du contenu fixe en début ou en fin de fichier
    Chapitres : Traitement de fichiers
    Testé sous : Linux, Windows (ActiveState Perl, Strawberry Perl)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    perl -i.bak -ne 'if ($lastARGV ne $ARGV) { print "ceci est un entête\n"; $lastARGV = $ARGV} print; print "ceci est un pied\n" if eof' test1.dat test2.dat ...

  13. #13
    Responsable Perl et Outils

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    Afin de ne pas se perdre dans les posts et surtout dans le but que les commentaires soient liés uniquement à une seule Q/R, je vous recommande de faire vos propositions dans le sous-forum contribuez.
    Pour une meilleure lisibilité, mettez en titire le tag [UNILIGNE].
    Exemple :

    [UNILIGNE] Comment ajouter du contenu fixe en début ou en fin de fichier
    Chapitres : Traitement de fichiers
    Testé sous : Linux, Windows (ActiveState Perl, Strawberry Perl)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    perl -i.bak -ne 'if ($lastARGV ne $ARGV) { print "ceci est un entête\n"; $lastARGV = $ARGV} print; print "ceci est un pied\n" if eof' test1.dat test2.dat ...
    Si je constate que nous disposons de beaucoup de propositions, je ferais une FAQ dédiée.

  14. #14
    Membre chevronné 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
    Par défaut [UNILIGNE] Comment générer une grille EuroMillions
    Suite à cette discussion:

    pour constituer une grille Euromillions on doit choisir 5 nombres entre 1 et 49 et 2 "étoiles" entre 1 et 11. Perl à la rescousse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Taisha:~/perl/forum $ perl -E 'for ([5, 49], [2, 11]) { my %h; ++$h{1 + int(rand($_->[1]))} while keys %h != $_->[0]; say "@{[keys %h]}"}'
    26 32 15 28 35
    11 4
    Taisha:~/perl/forum $

  15. #15
    Responsable Perl et Outils

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    Citation Envoyé par cmcmc Voir le message
    Suite à cette discussion:

    pour constituer une grille Euromillions on doit choisir 5 nombres entre 1 et 49 et 2 "étoiles" entre 1 et 11. Perl à la rescousse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Taisha:~/perl/forum $ perl -E 'for ([5, 49], [2, 11]) { my %h; ++$h{1 + int(rand($_->[1]))} while keys %h != $_->[0]; say "@{[keys %h]}"}'
    26 32 15 28 35
    11 4
    Taisha:~/perl/forum $
    http://perl.developpez.com/faq/perl/...e-EuroMillions

  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 : 59
    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
    Par défaut
    Je n'ose pas imaginer ce qu'il se passerait si ton tirage devenait gagnant

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