|
Publicité ' | ||||||||||||||||||||||||
|
|
#61 | |
|
Membre Expert
![]() Inscription : juillet 2006 Messages : 1 994 ![]() |
Salut,
ma contribution typo-orthographique : Citation:
__________________
Après avoir posté, relisez-vous ! Et en cas d'erreur, de faute d'orthographe ou d'oubli, il existe un bouton « Éditer », à utiliser sans modération On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère. Mes 2 cts, -- jp |
|
|
|
00
|
|
|
#62 | ||
|
Membre Expert
![]() |
Je dirais même qu'une phrase peut se terminer par plusieurs caractères qui se suivent :
Sans commentaire... Mais que se passe-t-il ?! Wouhou !!!!!!!!!!!! Du coup, ça donnerait : Code :
|
||
|
|
00
|
|
|
#63 |
|
Membre Expert
![]() Laurent R.Conseil - Consultant en systèmes d'information Inscription : mai 2012 Messages : 588 ![]() |
Bonjour,
Question: Comment modifier les formats de date dans un fichier? Chapitre : unilignes Testé sous : Linux, HP-UX, VMS, Windows (MS-DOS) Cette commande remplace les tirets par des slash dans le fichier (sans création d'un fichier temporaire intermédiaire) et fait donc passer les dates du format 13-09-2010 au format 13/09/2010 : Cette commande fait passer toutes les dates de tous les fichiers *.CSV en entrée du format 13/09/2010 au format 2010-09-13 : Code :
perl -pi -e 's/;(\d\d)\/(\d\d)\/(\d{4})/;$3-$2-$1/g' *.csv Code :
FOR %A IN (*.CSV) DO perl -pi.bak -e "s/;(\d\d)\/(\d\d)\/(\d{4})/;$3-$2-$1/g" %A Code :
perl -pi -e 's/;(\d{4})-(\d\d)-(\d\d) \d\d:\d\d:\d\d/;$3\/$2\/$1/g' *.txt
__________________
Sauf mention contraire explicite, les bouts de code que je poste en réponse à une question n'ont pas forcément été testés. |
|
|
00
|
|
|
#64 |
|
Membre Expert
![]() Laurent R.Conseil - Consultant en systèmes d'information Inscription : mai 2012 Messages : 588 ![]() |
Question: Comment mettre en minuscules (majuscules) tous les fichiers d'un répertoire?
Chapitre : unilignes Testé sous: HP-UX, Linux. Commande Perl qui met en minuscules tous les noms de fichiers du répertoire courant: Code :
perl -e 'for (@ARGV) { rename $_, lc($_) unless -e lc($_); }' * Code :
perl -e 'for (@ARGV) { rename $_, uc($_) unless -e uc($_); }' ad_*
__________________
Sauf mention contraire explicite, les bouts de code que je poste en réponse à une question n'ont pas forcément été testés. |
|
|
10
|
|
|
#65 |
|
Membre Expert
![]() Laurent R.Conseil - Consultant en systèmes d'information Inscription : mai 2012 Messages : 588 ![]() |
Question: Comment affichier la ligne n° 2 501 743 d'un fichier?
Chapitre : unilignes Testé sous: HP-UX, Linux, VMS, MS-DOS. J'avais un programme perl traitant un très gros fichier. A un moment donné, j'ai le message d'erreur suivant: utilisation de valeur non initialisée à la ligne 2501743 du fichier. Comment retrouver cette ligne pour comprendre la source de l'erreur? Commande Perl qui affiche la ligne N° 2 501 743 d'un fichier: Code :
perl -n -e '{$i++; print $_ if $i == 2501743;}' nom_fichier.txt
Code :
perl -ne 'print $_ if $. == 2501743;' nom_fichier.txt Code :
perl -ne 'print if $. == 2501743' nom_fichier.txt Code :
perl -ne 'print if 20 .. 60' nom_fichier.txt Code :
perl -ne 'print if 30..30' nom_fichier.txt Code :
perl -ne 'print and exit if $. == 2501743;}' nom_fichier.txt Commande qui affiche le numéro de ligne au début de chaque ligne d'un fichier, séparé du reste de la ligne par un espace:
__________________
Sauf mention contraire explicite, les bouts de code que je poste en réponse à une question n'ont pas forcément été testés. |
|
|
10
|
|
|
#66 |
|
Membre Expert
![]() |
Lolo78bon, pour certains cas, je pense que je préfèrerais sed ^^ mais il y a de très bonne idées, et surtout, ça ouvre d'autres possibilités ! Peut-être une petite remarque pour les débutants par rapport à la partie "conversions de dates" (notamment le premier exemple) puisque tous les tirets seront convertis, qu'ils soient ou non utilisé dans une date ! De même, dans l'exemple suivant, il faut que la date soit précédée d'un ";" Pour la gestion de plusieurs caractères sous dos, le plus simple que j'ai trouvé est d'utiliser FOR: Code :
FOR %A IN (*.CSV) DO perl -pi.bak -e "s/;(\d\d)\/(\d\d)\/(\d{4})/;$3-$2-$1/g" %A |
|
|
10
|
|
|
#67 |
|
Membre Expert
![]() |
Q/R : Compter des occurences dans un fichier
Chapitres : uniligne Testé sous : Linux, Windows La commande suivante permet de compter pour chaque ligne le nombre d’occurrences d'un motif donné... y'a ptet plus simple (avec ou sans Perl), mais je n'ai trouvé que ça rapidement ^^ Dans mon cas, je voulais vérifier le nombre de pipe pour chaque ligne d'un fichier (en utilisant un petit | uniq après la commande suivante) : Code :
> perl -ne "printf qq|%d\n|,$m=()=$_=~m/\|/g;" <fichier> qq|...| permet d'éviter l'utilisation des " parfois problématiques sous Windows ou dans les alias. Cette commande est équivalente à "..." %d\n indique à printf d'afficher le premier argument au format décimal suivi d'un saut à la ligne $m=()=m/\|/g; le secret, c'est l'assignation de l'expression m/\|/g à une liste anonyme () qui renvoie donc la liste des occurrences pour chaque ligne; puis, l'évaluation de cette liste dans un context scalaire avec $m=... qui provoque l'évaluation du nombre d'éléments de la liste voir ici pour plus de détails et d'autre opérateurs sympas ps.: \| est ici la chaine cherchée, on peut évidemment la remplacer... |
|
|
00
|
|
|
#68 | |
|
Membre Expert
![]() Laurent R.Conseil - Consultant en systèmes d'information Inscription : mai 2012 Messages : 588 ![]() |
Citation:
Merci pour ton astucieuse suggestion sur la gestion des fichiers DOS multiples, j'ai ajouté ta proposition dans mon post.
__________________
Sauf mention contraire explicite, les bouts de code que je poste en réponse à une question n'ont pas forcément été testés. |
|
|
|
00
|
|
|
#69 |
![]() ![]() ![]() Inscription : avril 2004 Messages : 13 809 ![]() |
Bonjour,
Je vais rajouter vos 4 unilignes Perl suivants*:
Juste une petite remarque Lolo78. Lorsque tu dis que tes codes sont compatibles Windows (MS-DOS), attention car c'est faux pour la simple raison que ça ne fonctionne pas à cause des simples quotes (perl -e '' au lieu de perl -e "...").
__________________
|
|
00
|
|
|
#70 |
![]() ![]() ![]() Inscription : avril 2004 Messages : 13 809 ![]() |
Vos quatre unilignes ont été rajoutés dans la FAQ Perl.
__________________
|
|
00
|
|
|
#71 |
|
Membre Expert
![]() Laurent R.Conseil - Consultant en systèmes d'information Inscription : mai 2012 Messages : 588 ![]() |
Super. Du coup j'en ajoutrerai d'autres.
__________________
Sauf mention contraire explicite, les bouts de code que je poste en réponse à une question n'ont pas forcément été testés. |
|
|
00
|
|
|
#72 | ||
|
Membre Expert
![]() Laurent R.Conseil - Consultant en systèmes d'information Inscription : mai 2012 Messages : 588 ![]() |
Question: Comment imprimer le quatrième mot de chaque ligne (émulation de la commande cut d'Unix)
Chapitre : unilignes Testé sous: HP-UX, Linux (mais doit aussi marcher sous Windows et VMS en remplaçant les apostrophes par des guillemets) Imprime le quatrième mot de chaque ligne, sauf si la ligne commence par un #, le séparateur entre les mots étant le ”;” : Code :
perl -naF";" -e 'next if /^#/; print qq/$F[3]\n/' fichier.txt Code :
perl -naF";" -e 'print qq/$F[4] $F[1]\n/ unless /^ *#/' fichier.txt Le fichier exemple en entrée: Code :
Code :
perl -ne '/(.*;)/; print qq/$1\n/' compte.txt > output.txt
__________________
Sauf mention contraire explicite, les bouts de code que je poste en réponse à une question n'ont pas forcément été testés. |
||
|
|
00
|
|
|
#73 |
|
Membre Expert
![]() Laurent R.Conseil - Consultant en systèmes d'information Inscription : mai 2012 Messages : 588 ![]() |
Question: Comment supprimer les lignes vides d'un fichier
Chapitre : unilignes Testé sous: HP-UX et Linux (ainsi que VMS et Windows en remplaçant les apostrophes par des guillemets) Pour retirer d'un fichier toutes les lignes vides ou ne comprenant que des espaces blancs : Code :
perl -ne 'print unless /^\s*$/;' mon_fichier.txt > fichier_resultat.txt
__________________
Sauf mention contraire explicite, les bouts de code que je poste en réponse à une question n'ont pas forcément été testés. |
|
|
00
|
|
|
#74 |
|
Membre Expert
![]() Laurent R.Conseil - Consultant en systèmes d'information Inscription : mai 2012 Messages : 588 ![]() |
Question: Comment supprimer les doublons d'un fichier trié
Chapitre : unilignes Testé sous: HP-UX, Linux (ainsi que VMS en remplaçant les apostrophes par des guillemets) J'ai un programme qui compare les données clients entre deux applications différentes. L'une des séries de fichiers de sortie contient la liste des numéros de clients pour lesquels il y a des différences. La nature du traitement de comparaison garantit que les numéros de clients sont triés dans l'ordre ascendant, mais si plusieurs différences ont été trouvées, alors le numéro de client se trouve plusieurs fois à la suite. Je désire créer un fichier sans doublons. Commande perl qui lit le fichier (préalablement trié) file_in.txt et stocke le résultat dédoublonné dans file_out.txt: Code :
perl -ne 'print $_ if $a ne $_; $a=$_;' file_in.txt > file_out.txt Commande Perl qui dédoublonne tous les fichiers DELTA_*.TXT d'un répertoire (cette version avec variable d'environnement Unix ne marchera que sous Unix ou Linux, une retouche est nécessaire sous VMS): Code :
perl -ni -e 'print if $a ne $_; $a=$_;' $RESULT_PATH/DELTA_*.TXT Code :
perl -ne 'chomp; print "$_ $a\n" if $a gt $_; $a=$_;' file_in.txt Si le fichier est très gros, on peut se contenter d'arrêter la recherche dès la première anomalie rencontrée et afficher les deux lignes fautives ainsi que le numéro de ligne: Code :
perl -ne 'print "$. $_ $a\n" and exit if $a gt $_; $a=$_;' file_in.txt
__________________
Sauf mention contraire explicite, les bouts de code que je poste en réponse à une question n'ont pas forcément été testés. |
|
|
00
|
|
|
#75 |
![]() ![]() ![]() Inscription : avril 2004 Messages : 13 809 ![]() |
Bonjour,
Les trois questions ont été rajoutées dans la FAQ Perl.
__________________
|
|
00
|
|
|
#76 |
|
Membre Expert
![]() Laurent R.Conseil - Consultant en systèmes d'information Inscription : mai 2012 Messages : 588 ![]() |
Question: Comment lancer plusieurs fois un programme (perl ou autre) avec des paramètres differents
Chapitre : unilignes Testé sous: VMS et HP-UX, mais devrait marcher de la même façon sous Linux et Windows. (Il faut utiliser des apostrophes pour Linux et Unix, et des guillemets pour VMS et Windows.) Le programme CHCOEXO345.PL prend en paramètre le nom de la database sur laquelle il doit s'exécuter. On veut le lancer en automatique sur 8 databases. On le lance normalement avec, par exemple, la commande suivante (sous VMS): La commande Perl suivante permet de lancer en une seule fois ce programme pour l'ensemble des databases: Code :
perl -e "`perl CHCOEXO345.PL $_` foreach qw /DB01 DB02 DB03 DB04 DB05 DB06 DB07 DB08/"
__________________
Sauf mention contraire explicite, les bouts de code que je poste en réponse à une question n'ont pas forcément été testés. |
|
|
00
|
|
|
#77 |
|
Expert Confirmé
![]() ![]() Inscription : avril 2009 Messages : 2 678 ![]() |
Petite amélioration : remplacer
`perl ... par `$0 ... Ceci permet de ne pas se soucier de l'exécutable perl utilisé (dans le cas d'une installation de plusieurs perl). Dans ce cas de figure, le même perl est utilisé pour l'uniligne que pour celui lancé par ``).
__________________
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. |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com