Précédent   Forum du club des développeurs et IT Pro > Autres langages > Perl > Langage
Langage Toutes vos questions sur les scripts Perl en général. Avant de poster, veuillez consulter les FAQs perl, les cours Perl, les critiques de livres et les sources Perl.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 18/02/2011, 10h15   #1
djibril
Responsable Perl et Outils

 
Avatar de djibril
 
Homme
Inscription : avril 2004
Messages : 13 481
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 33
Localisation : France

Informations forums :
Inscription : avril 2004
Messages : 13 481
Points : 31 590
Points : 31 590
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) :

Citation:
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.
__________________
Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
djibril est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 18/02/2011, 11h34   #2
djibril
Responsable Perl et Outils

 
Avatar de djibril
 
Homme
Inscription : avril 2004
Messages : 13 481
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 33
Localisation : France

Informations forums :
Inscription : avril 2004
Messages : 13 481
Points : 31 590
Points : 31 590
La première uniligne dans nos sources : ici.

A vos claviers !!!
__________________
Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
djibril est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/02/2011, 22h14   #3
djibril
Responsable Perl et Outils

 
Avatar de djibril
 
Homme
Inscription : avril 2004
Messages : 13 481
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 33
Localisation : France

Informations forums :
Inscription : avril 2004
Messages : 13 481
Points : 31 590
Points : 31 590
Je vois que ça passionne les foules !!
__________________
Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
djibril est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/02/2011, 23h36   #4
Philou67430
Expert Confirmé
 
Inscription : avril 2009
Messages : 2 633
Détails du profil
Informations personnelles :
Âge : 47

Informations forums :
Inscription : avril 2009
Messages : 2 633
Points : 3 079
Points : 3 079
"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é
Using strict and warnings is good for you.
Philou67430 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2011, 09h07   #5
djibril
Responsable Perl et Outils

 
Avatar de djibril
 
Homme
Inscription : avril 2004
Messages : 13 481
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 33
Localisation : France

Informations forums :
Inscription : avril 2004
Messages : 13 481
Points : 31 590
Points : 31 590
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
__________________
Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
djibril est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2011, 14h05   #6
Philou67430
Expert Confirmé
 
Inscription : avril 2009
Messages : 2 633
Détails du profil
Informations personnelles :
Âge : 47

Informations forums :
Inscription : avril 2009
Messages : 2 633
Points : 3 079
Points : 3 079
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 :
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é
Using strict and warnings is good for you.
Philou67430 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2011, 14h16   #7
djibril
Responsable Perl et Outils

 
Avatar de djibril
 
Homme
Inscription : avril 2004
Messages : 13 481
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 33
Localisation : France

Informations forums :
Inscription : avril 2004
Messages : 13 481
Points : 31 590
Points : 31 590


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 :
perl -ne "print join qq{ }, @{[ split /;/ ]}[8,0],qq{\n}" fichier.csv
Avec un petit exemple

Code :
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 :
1
2
col8 col0
test9 test1
ça te va ?
__________________
Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
djibril est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2011, 14h43   #8
Philou67430
Expert Confirmé
 
Inscription : avril 2009
Messages : 2 633
Détails du profil
Informations personnelles :
Âge : 47

Informations forums :
Inscription : avril 2009
Messages : 2 633
Points : 3 079
Points : 3 079
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é
Using strict and warnings is good for you.
Philou67430 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2011, 14h46   #9
djibril
Responsable Perl et Outils

 
Avatar de djibril
 
Homme
Inscription : avril 2004
Messages : 13 481
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 33
Localisation : France

Informations forums :
Inscription : avril 2004
Messages : 13 481
Points : 31 590
Points : 31 590
unilignes à jours dans nos sources avec 5 questions/réponses
__________________
Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
djibril est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2011, 14h47   #10
Philou67430
Expert Confirmé
 
Inscription : avril 2009
Messages : 2 633
Détails du profil
Informations personnelles :
Âge : 47

Informations forums :
Inscription : avril 2009
Messages : 2 633
Points : 3 079
Points : 3 079
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é
Using strict and warnings is good for you.
Philou67430 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2011, 14h50   #11
djibril
Responsable Perl et Outils

 
Avatar de djibril
 
Homme
Inscription : avril 2004
Messages : 13 481
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 33
Localisation : France

Informations forums :
Inscription : avril 2004
Messages : 13 481
Points : 31 590
Points : 31 590
ça marche, je les rajouterais dans les mots clés de la questions
__________________
Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
djibril est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2011, 14h56   #12
djibril
Responsable Perl et Outils

 
Avatar de djibril
 
Homme
Inscription : avril 2004
Messages : 13 481
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 33
Localisation : France

Informations forums :
Inscription : avril 2004
Messages : 13 481
Points : 31 590
Points : 31 590
C'est fait !!
__________________
Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
djibril est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2011, 15h50   #13
djibril
Responsable Perl et Outils

 
Avatar de djibril
 
Homme
Inscription : avril 2004
Messages : 13 481
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 33
Localisation : France

Informations forums :
Inscription : avril 2004
Messages : 13 481
Points : 31 590
Points : 31 590
Nouvelle question : Utilise-t-on des simples ou double quote dans les unilignes ?

Toute suggestion ou correction est la bienvenue.
__________________
Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
djibril est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2011, 16h56   #14
Philou67430
Expert Confirmé
 
Inscription : avril 2009
Messages : 2 633
Détails du profil
Informations personnelles :
Âge : 47

Informations forums :
Inscription : avril 2009
Messages : 2 633
Points : 3 079
Points : 3 079
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 :
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 :
perl -e '$pseudo = 'djibril'; print 'pseudo' ;'
ou encore

Code :
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 :
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é
Using strict and warnings is good for you.
Philou67430 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2011, 18h47   #15
djibril
Responsable Perl et Outils

 
Avatar de djibril
 
Homme
Inscription : avril 2004
Messages : 13 481
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 33
Localisation : France

Informations forums :
Inscription : avril 2004
Messages : 13 481
Points : 31 590
Points : 31 590
La réponse a été mise à jour. Merci Philou67430.
__________________
Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
djibril est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2011, 08h54   #16
Philou67430
Expert Confirmé
 
Inscription : avril 2009
Messages : 2 633
Détails du profil
Informations personnelles :
Âge : 47

Informations forums :
Inscription : avril 2009
Messages : 2 633
Points : 3 079
Points : 3 079
__________________
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é
Using strict and warnings is good for you.
Philou67430 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2011, 10h21   #17
Philou67430
Expert Confirmé
 
Inscription : avril 2009
Messages : 2 633
Détails du profil
Informations personnelles :
Âge : 47

Informations forums :
Inscription : avril 2009
Messages : 2 633
Points : 3 079
Points : 3 079
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é
Using strict and warnings is good for you.
Philou67430 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2011, 10h24   #18
djibril
Responsable Perl et Outils

 
Avatar de djibril
 
Homme
Inscription : avril 2004
Messages : 13 481
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 33
Localisation : France

Informations forums :
Inscription : avril 2004
Messages : 13 481
Points : 31 590
Points : 31 590
Ce qui donne ceci ?
Code :
perl -ne "chomp, print join qq{ }, @{[ split /;/ ]}[8,0],$/" fichier.csv
c'est ça ?
__________________
Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
djibril est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2011, 10h25   #19
Philou67430
Expert Confirmé
 
Inscription : avril 2009
Messages : 2 633
Détails du profil
Informations personnelles :
Âge : 47

Informations forums :
Inscription : avril 2009
Messages : 2 633
Points : 3 079
Points : 3 079
j'aurais plutôt mis un ;

Code DOS :
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é
Using strict and warnings is good for you.
Philou67430 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2011, 10h26   #20
djibril
Responsable Perl et Outils

 
Avatar de djibril
 
Homme
Inscription : avril 2004
Messages : 13 481
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 33
Localisation : France

Informations forums :
Inscription : avril 2004
Messages : 13 481
Points : 31 590
Points : 31 590
Oui pardon, tu as raison. bon, je corrige.
__________________
Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
djibril est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 00h36.


 
 
 
 
Partenaires

Hébergement Web