Sur mon cygwin, j'ai aussi des fichiers de mon r�pertoire local qui sont list�s...![]()
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:
Ou supprimer temporairement le r�pertoire courant (".") de @INC:
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)"
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)"
- La programmation fonctionnelle en Perl : 1. Les op�rateurs de liste; 2. Les fonctions d'ordre sup�rieur; 3. �tendre le langage.
- Comment utiliser des d�corateurs en Perl: Un tutoriel pour changer le comportement d'une fonction sans en modifier le code source
- De Perl 5 � Perl 6 : 1. Les bases; 2. Les nouveaut�s; 3. Approfondissements; 4. Annexe 1: Ce qui change entre Perl 5 et Perl 6; Annexe 2: Les nouveaut�s de Perl 6.
- Les regex et grammaires de Perl 6
- Objets, classes et r�les en Perl 6 - Tutoriel de programmation orient�e objet
- Tour d'horizon du nouveau langage Perl 6
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:
Apr�s sed:
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3 col1|col2|col3 a1|a2|a3 b1|b2|b3
Evidemment, pas de sauvegarde des fichiers
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 b3et 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.
-i.bak �crit dans le fichier ouvert en le rempla�ant (et en sauvegardant l'original avec l'extension .bak)
Code : S�lectionner tout - Visualiser dans une fen�tre � part perl -i.bak -e "while (<>) {chomp;print;print $.%6?'|':qq|\n|}" <fichier>
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 :
Pour info, sous Windows, je l'ai pass� comme �a:
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
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
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 b3Mais c'est toujours bon � prendre sous perl
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
![]()
Encore plus court :
(cygwin/linux)
Code : S�lectionner tout - Visualiser dans une fen�tre � part perl -i.bak -nE 'chomp;print $_, $.%3 ? "|":"\n"' *.txt
L'option -n fait la while(<>) toute seule.
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.
peut aussi s'�crire:
Code : S�lectionner tout - Visualiser dans une fen�tre � part perl -i.bak -e "while (<>) {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 -ni.bak -e "chomp;print;print $.%3?'|':qq|\n|" test
peut se r��crire plus bri�vement:
Code : S�lectionner tout - Visualiser dans une fen�tre � part perl -e "while (<>) {s/toto/titi/g; print};" fic.txt
EDIT: Oups, je n'avais pas vu le message de Philou qui disait la m�me chose.
Code : S�lectionner tout - Visualiser dans une fen�tre � part perl -pe "s/toto/titi/g;" fic.txt
- La programmation fonctionnelle en Perl : 1. Les op�rateurs de liste; 2. Les fonctions d'ordre sup�rieur; 3. �tendre le langage.
- Comment utiliser des d�corateurs en Perl: Un tutoriel pour changer le comportement d'une fonction sans en modifier le code source
- De Perl 5 � Perl 6 : 1. Les bases; 2. Les nouveaut�s; 3. Approfondissements; 4. Annexe 1: Ce qui change entre Perl 5 et Perl 6; Annexe 2: Les nouveaut�s de Perl 6.
- Les regex et grammaires de Perl 6
- Objets, classes et r�les en Perl 6 - Tutoriel de programmation orient�e objet
- Tour d'horizon du nouveau langage Perl 6
Une autre fa�on de faire:
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/|/g' text1.txt
ou via un yank:
Code : S�lectionner tout - Visualiser dans une fen�tre � part perl -pe '$.%3 && s/\n/|/' text1.txt
Code : S�lectionner tout - Visualiser dans une fen�tre � part perl -pe '$.%3 && y/\n/|/' text1.txt
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 ...
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)
Si je constate que nous disposons de beaucoup de propositions, je ferais une FAQ d�di�e.
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 ...
- Les meilleurs cours et tutoriels Perl et Perl 6 pour vous former ;
- FAQ Perl, Perl 6 et Perl/Tk d'entraide ;
- Les news sur la rubrique Perl ;
- S'abonner au compte Twitter de la rubrique Perl ;
- Mes tutoriels developpez.com.
Pas de questions technique par messagerie priv�e (lisez les r�gles du forum Perl) et pour les nouveaux !
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 $
- Les meilleurs cours et tutoriels Perl et Perl 6 pour vous former ;
- FAQ Perl, Perl 6 et Perl/Tk d'entraide ;
- Les news sur la rubrique Perl ;
- S'abonner au compte Twitter de la rubrique Perl ;
- Mes tutoriels developpez.com.
Pas de questions technique par messagerie priv�e (lisez les r�gles du forum Perl) et pour les nouveaux !
Je n'ose pas imaginer ce qu'il se passerait si ton tirage devenait gagnant![]()
Mise � jour faite de la question Euromillions, sans modifier le tirage
!
N.B. 10 ans apr�s, on ne sait jamais.
- Les meilleurs cours et tutoriels Perl et Perl 6 pour vous former ;
- FAQ Perl, Perl 6 et Perl/Tk d'entraide ;
- Les news sur la rubrique Perl ;
- S'abonner au compte Twitter de la rubrique Perl ;
- Mes tutoriels developpez.com.
Pas de questions technique par messagerie priv�e (lisez les r�gles du forum Perl) et pour les nouveaux !
Partager