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. #81
    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
    Sur mon cygwin, j'ai aussi des fichiers de mon r�pertoire local qui sont list�s...

  2. #82
    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
    Citation Envoy� par Philou67430 Voir le message
    Sur mon cygwin, j'ai aussi des fichiers de mon r�pertoire local qui sont list�s...
    Normal, puisque le r�pertoire local fait normalement partie du tableau @INC.

    On peut filtrer les r�sultats:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    perl -M5.10.1 -e "sub search {for $d (glob qq|$_[0]/*|) { -d $d ? search ($d) : say $d if $d =~ /\.pm/;}} search ($_) for (@INC)"
    Ou supprimer temporairement le r�pertoire courant (".") de @INC:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    perl -M5.10.1 -e "pop @INC; sub search {for $d (glob qq|$_[0]/*|) { -d $d ? search ($d) : say $d if $d =~ /\.pm/;}} search ($_) for (@INC)"

  3. #83
    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
    Hello � tous,

    suite � une fausse manipulation avec sed sur des fichiers type csv, je me suis retrouv� avec tout un r�pertoire comportant mes fichiers avec chaque �l�ment sur une seule ligne

    Exemple avant sed:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    col1|col2|col3
    a1|a2|a3
    b1|b2|b3
    Apr�s sed:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    col1
    col2
    col3
    a1
    a2
    a3
    b1
    b2
    b3
    Evidemment, pas de sauvegarde des fichiers et pas trop envie de les refaire tous

    D'o� mon uniligne du jour (merci perl ) : comment, � partir d'un fichier texte, cr�er un fichier type csv en utilisant chaque ligne pour remplir les "cellules" � la suite les unes des autres sur un nombre de colonnes bien d�fini ?

    Par exemple, pour un csv de x colonnes, la lecture du fichier texte va donner :
    premi�re ligne du fichier > premier champ, premi�re ligne du csv
    deuxi�me ligne du fichier > deuxi�me champ, premi�re ligne du csv
    x i�me ligne du fichier > x i�me champ, premi�re ligne du csv
    x+1 i�me ligne du fichier > premier champ, deuxi�me ligne du csv
    etc.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    perl -i.bak -e "while (<>) {chomp;print;print $.%6?'|':qq|\n|}" <fichier>
    -i.bak �crit dans le fichier ouvert en le rempla�ant (et en sauvegardant l'original avec l'extension .bak)
    chomp supprime le caract�re de fin de ligne de l'�l�ment lu
    print �crit l'�l�ment lu dans le fichier gr�ce au param�tre -i
    print $.%6?'|':qq|\n| �crit soit un pipe (s�parateur de mes champs dans le csv cible) soit un saut de ligne si on a atteint la fin de la ligne
    $.%6 regarde si la ligne courante ($.) est un multiple de 6; c'est ce qui permet de savoir si on doit �crire un pipe pour s�parer deux �l�ments ou terminer la ligne lorsque le nombre d'�l�ments sur la ligne est atteint
    rappel:
    ...?...:... op�rateur ternaire �quivalent � if ... then ... else ...
    qq|...| permet d'�viter l'utilisation des " parfois probl�matiques sous Windows ou dans les alias. Cette commande est �quivalente � "..."


    Avec le "6" qui correspond au nombre de colonnes du fichier cible et le '|' qui est le s�parateur.

    Exemple concret :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    D:\>cat test
    col1
    col2
    col3
    a1
    a2
    a3
    b1
    b2
    b3
     
    D:\>perl -i.bak -e "while (<>) {chomp;print;print $.%3?'|':qq|\n|}" test
     
    D:\>cat test
    col1|col2|col3
    a1|a2|a3
    b1|b2|b3
    Pour info, sous Windows, je l'ai pass� comme �a:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    FOR %A IN (*.txt) DO perl -i.bak -e "while (<>) {chomp;print;print $.%6?'|':qq|\n|}" %A
    a+

  4. #84
    Expert confirm� Avatar de disedorgue
    Homme Profil pro
    Ing�nieur int�gration
    Inscrit en
    D�cembre 2012
    Messages
    4 349
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : Ing�nieur int�gration
    Secteur : High Tech - Op�rateur de t�l�communications

    Informations forums :
    Inscription : D�cembre 2012
    Messages : 4 349
    Par d�faut
    Bonjour,
    Juste pour information, faisable sous paste:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $ cat text1.txt
    col1
    col2
    col3
    a1
    a2
    a3
    b1
    b2
    b3
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    $ paste -d'|' - - - <text1.txt
    col1|col2|col3
    a1|a2|a3
    b1|b2|b3
    Mais c'est toujours bon � prendre sous perl

  5. #85
    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
    Encore plus court :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    perl -i.bak -nE 'chomp;print $_, $.%3 ? "|":"\n"' *.txt
    (cygwin/linux)
    L'option -n fait la while(<>) toute seule.

  6. #86
    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
    La commande paste existe sous Unix/Linux, mais peut-�tre pas sous les autres OS.

    Sinon, l'option -n de la ligne de commande Perl permet de simplifier la r�daction d'un uniligne en ajoutant une boucle "while <>" implicite.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    perl -i.bak -e "while (<>) {chomp;print;print $.%3?'|':qq|\n|}" test
    peut aussi s'�crire:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    perl -ni.bak -e "chomp;print;print $.%3?'|':qq|\n|" test
    L'option -p est �galement int�ressante � conna�tre (mais pas utilisable ici), elle ajoute un print implicite. Par exemple:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    perl -e "while (<>) {s/toto/titi/g; print};" fic.txt
    peut se r��crire plus bri�vement:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    perl -pe "s/toto/titi/g;" fic.txt
    EDIT: Oups, je n'avais pas vu le message de Philou qui disait la m�me chose.

  7. #87
    Expert confirm� Avatar de disedorgue
    Homme Profil pro
    Ing�nieur int�gration
    Inscrit en
    D�cembre 2012
    Messages
    4 349
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : Ing�nieur int�gration
    Secteur : High Tech - Op�rateur de t�l�communications

    Informations forums :
    Inscription : D�cembre 2012
    Messages : 4 349
    Par d�faut
    Une autre fa�on de faire:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    perl -pe '$.%3 && s/\n/|/g' text1.txt
    On peut d'ailleurs se passer du g puisqu'un seul remplacement par ligne,donc:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    perl -pe '$.%3 && s/\n/|/' text1.txt
    ou via un yank:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    perl -pe '$.%3 && y/\n/|/' text1.txt

  8. #88
    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 ...

  9. #89
    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.

  10. #90
    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 $

  11. #91
    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

  12. #92
    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

  13. #93
    Membre �prouv�
    Homme Profil pro
    Ing�nieur int�gration
    Inscrit en
    Juillet 2014
    Messages
    84
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activit� : Ing�nieur int�gration
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2014
    Messages : 84
    Par d�faut
    Citation Envoy� par Philou67430 Voir le message
    Je n'ose pas imaginer ce qu'il se passerait si ton tirage devenait gagnant
    j'ai mis� 2,50 euros pour le tirage de l'euromillion de ce soir avec ses num�ros
    on verra bien

  14. #94
    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
    Mise � jour faite de la question Euromillions , sans modifier le tirage !


    N.B. 10 ans apr�s, on ne sait jamais.

Discussions similaires

  1. R�ponses: 1
    Dernier message: 16/06/2011, 09h08
  2. R�ponses: 3
    Dernier message: 16/09/2003, 13h04
  3. [langage]fonction perl pour exécuter des commandes consoles
    Par S�bastien dans le forum Langage
    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