remplacer un ligne dans un fichier - Perl - Programmation
Marsh Posté le 23-05-2007 à 11:05:16
et t'en es ou pour l'instant?
Nan parce que grosso modo ton truc se resume à ouvrir le fichier, faire une regex, ré-écrire la ligne.
Marsh Posté le 23-05-2007 à 11:12:27
j'ouvre le fichier,
je trouve la ligne.
mais le truc c'est que je vois pas trop comment modifier ou supprimer la ligne et mettre ma nouvelle valeur;
Marsh Posté le 23-05-2007 à 11:31:05
donny3 a écrit : j'ouvre le fichier, |
A moins que ton fichier soit vraiment gros, le plus simple serait d'en copier tout le contenu dans un nouveau fichier avec, au passage, la nouvelle valeur de ta variable. Ensuite, tu n'as plus qu'à renommer bêtement le nouveau fichier pour écraser l'ancien et voilà.
Autre solution, rajouter ta ligne à la fin du fichier existant. Arrange toi dans ce cas pour que ton script n'arrête pas de lire le fichier actuel dès qu'il trouve la variable qui l'intéresse parce qu'avec cette méthode, il doit la trouver 2 fois : 1 fois quelque part dans le fichier et 1 autre fois tout à la fin de celui-ci.
Mais ma 1ère solution me semble plus propre.
Marsh Posté le 23-05-2007 à 11:47:20
euh, s'il n'y a que "stand=machin" à changer, on peut aussi utiliser l'option -i de l'interpréteur
Marsh Posté le 23-05-2007 à 12:01:50
en faite ce que j'ai fait c'est quelquechose dans ce genre
$stand est un peu plus compliquer il contient cela
Code :
|
j'ai tester en mettant ma variable dans $y et sa fonctionne mais le truc que je ne vois pas, c'est comment faire cela pour que la modif se repercute dans mon fichier;
j'ouvre mon fichier ok, et apres, si je veux faire une modif dedans ??
la je suis un peu perdu
Marsh Posté le 23-05-2007 à 12:05:04
Comme le dit Aricoh, il faut écrire un nouveau fichier, et écraser ensuite l'ancien avec.
Marsh Posté le 23-05-2007 à 13:09:31
ok, je voulais faire sa des le debut, mais je pensai qu'il y avait un moyen de le faire sans reecrire le fichier mais apparamment non ou alors faut faire une usine à gaz.
ce que je vais faire, c'est ouvrir d'abord mon fichier, lire chaque ligne et la mettre dans un tableau et quand je tombe sur la ligne avec $stand ,je la remplace avec sa nouvelle valeur;
une fois mon tableau fait , je recreer un fichier avec les valeur contenu dans mon tableau et voila;
merci
Marsh Posté le 23-05-2007 à 13:11:55
donny3 a écrit : ok, je voulais faire sa des le debut, mais je pensai qu'il y avait un moyen de le faire sans reecrire le fichier mais apparamment non ou alors faut faire une usine à gaz. |
C'est la solution la plus simple
Marsh Posté le 05-07-2007 à 10:12:45
Il faudrait faire qqch du style
perl -p 's/(\$stand=)yes/$1=no/' [nom_fichier] > [nom_fichier_modifié]
Mais sed est aussi efficace pour ce genre d'opération...
Cordialement
Marsh Posté le 06-07-2007 à 08:52:18
perl -i permet de modifier directement le fichier que tu lis.
Marsh Posté le 06-07-2007 à 09:06:09
hé les kidz, les "ups" deux mois plus tard c'est peut-être plus la peine
Marsh Posté le 06-07-2007 à 10:39:30
dreameddeath a écrit : Mais sed est aussi efficace pour ce genre d'opération... |
k, lol
Chez Solaris en tout cas, traiter un fichier de 300Mo+ prends 10min en sed, 10s en PERL.
Marsh Posté le 28-11-2011 à 13:38:26
Peut on également cibler des lignes dans un fichier et modifier la valeur qu'on y retrouve à 2.
Par exemple, remplacer aux lignes, 50, 90, 130, 175, 215, 300, 615, "width = 215" par "width = 200".
Variante, mettre toutes les variables width à 215, (même s'ils elles ne sont pas toutes à la même valeur).
Marsh Posté le 28-11-2011 à 17:04:04
Il suffit de mettre un compteur de ligne et de ne permettre les opérations de remplacement qu'aux lignes ayant le numéro voulu.
Pour la seconde question, avec une expression régulière style
s/width\s*=\s*\d+/width = 215/o;
ça devrait coller, non?
A+,
Marsh Posté le 23-05-2007 à 10:55:01
Bonjour,
J'ai un fichier qui contient cette ligne et d'autre lignes:
...
$stand=yes
...
je souhaiterais pouvoir modifier uniquement cette ligne,
en faite je veux faire un script qui prenne en parametre une variable avec sa valeur ( ex: $stand=no), et ce script doit m'ouvrir le fichier dont je parle audessus et modifier la ligne la ligne ave la nouvelle valeur;
c'est a dire au depart j'ai
$stand=yes dans le fichier
et quand je lance mon script
j'ai cela dans le fichier $stand=no;
Merci à tous