Triturage de fichier en PERL - Perl - Programmation
Marsh Posté le 28-09-2005 à 16:09:23
Tu dois ouvrir un fichier cible et y écrire toutes les lignes que tu lis de ton premier fichier, sans celles que tu souhaites enlever.
Tu ouvres un fichier en écriture avec :
open(FILE_OUT, ">nom_du_fichier" ) or die "Message : $!"; |
Quand tu as terminé, tu clos les deux fichiers, puis tu écrases l'ancien fichier avec le nouveau en utilisant :
rename ANCIEN_NOM, NOUVEAU_NOM
Marsh Posté le 28-09-2005 à 16:26:19
je suis ok, mais comment puis-je faire pour copier toutes les lignes sauf celle qui comporte "sarkozy" ?
Marsh Posté le 28-09-2005 à 16:28:08
ben tu copie toutes les lignes sauf sarkozy
ou alors
grep -v sarko fichier
Marsh Posté le 28-09-2005 à 16:42:32
katak a écrit : je suis ok, mais comment puis-je faire pour copier toutes les lignes sauf celle qui comporte "sarkozy" ? |
Poste ce que tu as déjà écrit comme code, pour qu'on voit où tu en es.
Surtout qu'il suffit de matcher le regexp "/sarkozy/i" soit ligne à ligne, soit avec un grep du tableau de chaînes représentant ton fichier dans son intégralité.
Marsh Posté le 28-09-2005 à 17:02:32
Ben a la base je suis physicien et je dois faire un programme... alors comprenez mon incompetence!!!
Voila ce que j'ai fait:
chop($ls = `ls *4X_ML.jb`); |
Donc mon fichier que je veux ouvrir c'est *4X_ML.jb et je veux copier toutes les lignes sauf celle ou y'a "sarkozy".
Merci!!!
Marsh Posté le 28-09-2005 à 17:17:07
Tu y étais presque, il te suffisait de remplacer "$temp" par "$_" et d'inverser la sélection dans ta ligne :
if (/sarkozy/) {print test $temp;} |
Ce qui donne :
if (!/sarkozy/i) {print test $_;} |
(le "i" après l'expression rationnelle, c'est pour ignorer les différences majuscule/minuscule).
Je te propose maintenant une manière plus propre d'effectuer ta tâche :
use strict; |
Marsh Posté le 28-09-2005 à 17:38:55
J'ai voulu creer un fichier avec des chiffres dedans et si un de ces chiffres se trouve dans mon fichier a tester alors on vire la ligne mais je ne sais pas comment utiliser une variable qui va pointer sur chaque nombre....
# Re'cupe'ration de la liste des fichiers a` filtrer |
Marsh Posté le 28-09-2005 à 17:43:50
Je ne comprends ni ta question, ni la logique de ce que tu as voulu faire en triturant le bout de code que je t'ai donné.
Marsh Posté le 28-09-2005 à 17:55:15
`ls *4X_ML.jb`
opendir(DIRECTORY, "." ) or die "Echec ouverture du re'pertoire courant : $!";
my @files = grep /4X_ML.jb$/, readdir DIRECTORY;
on voit les pros du perl ...
<*4X_ML.jb>
et c'est fait ...
Marsh Posté le 28-09-2005 à 18:00:28
Taz a écrit : <*4X_ML.jb> |
Ah c'est chouette ça, je ne connaissais pas ce raccourci.
Marsh Posté le 28-09-2005 à 18:26:55
Elmoricq a écrit : Je ne comprends ni ta question, ni la logique de ce que tu as voulu faire en triturant le bout de code que je t'ai donné. |
dans le fichier A j'ai des lignes qui comportent des numeros a deux chiffres, dans le fichier B j'ai une suite de numero (je l'organise comme je veux) a proscrire, donc je dois consulter B pour savoir ce que je dois enlever dans A.
merci Taz!!!
Marsh Posté le 27-10-2005 à 20:49:13
Taz a écrit : <*4X_ML.jb> |
Bon, j'avais besoin d'un rapide script à appliquer sur près de 3000 fichiers d'un coup, j'ai utilisé cette syntaxe, et j'ai reçu une erreur type "glob failed ... " (faudrait que je retrouve l'erreur exacte, j'étais assez pressé au taf').
En passant par readdir(), plus de souci.
Une idée de la raison pour laquelle ça a raté ? Y a une limite quelque part, genre un 2048 qui traine je sais pas où ?
Marsh Posté le 28-09-2005 à 16:03:21
Salut,
Voila je cherche a enlever une ligne bien precise dans un fichier que j'aurai cree:
J'ai un fichier qui s'apelle toto.txt et dedans il y a 1000 lignes, je veux effacer celle qui contient le mot sarkozy par exemple (oui j'aurais pu dire supprimer), quelle est la methode, j'arrive a ouvrir le fichier mais pas a effacer la ligne ou le mot y est.
Merci d'avance.