Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1375 connectés 

  FORUM HardWare.fr
  Programmation
  Perl

  remplacer un ligne dans un fichier

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

remplacer un ligne dans un fichier

n°1563825
donny3
Posté le 23-05-2007 à 10:55:01  profilanswer
 

Bonjour,
 
J'ai un fichier qui contient cette ligne et d'autre lignes:
 

Citation :


...
$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

mood
Publicité
Posté le 23-05-2007 à 10:55:01  profilanswer
 

n°1563835
anapajari
s/travail/glanding on hfr/gs;
Posté le 23-05-2007 à 11:05:16  profilanswer
 

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.

n°1563839
donny3
Posté le 23-05-2007 à 11:12:27  profilanswer
 

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;
 

n°1563841
Elmoricq
Modérateur
Posté le 23-05-2007 à 11:18:28  profilanswer
 
n°1563855
Aricoh
gentil mais fo po pousser
Posté le 23-05-2007 à 11:31:05  profilanswer
 

donny3 a écrit :

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;


 
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.

n°1563871
Elmoricq
Modérateur
Posté le 23-05-2007 à 11:47:20  profilanswer
 

euh, s'il n'y a que "stand=machin" à changer, on peut aussi utiliser l'option -i de l'interpréteur ;)


Message édité par Elmoricq le 23-05-2007 à 11:47:49
n°1563888
donny3
Posté le 23-05-2007 à 12:01:50  profilanswer
 

en faite ce que j'ai fait c'est quelquechose dans ce genre
$stand est un peu plus compliquer il contient cela

Code :
  1. $y = '$stand= px(100 1001 200 2001);';
  2. $y =~ /^($stand= px\()(.*)(\);)$/;
  3. $y =~ s/$2/$newvalue/;


 
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

n°1563891
Elmoricq
Modérateur
Posté le 23-05-2007 à 12:05:04  profilanswer
 

Comme le dit Aricoh, il faut écrire un nouveau fichier, et écraser ensuite l'ancien avec.

n°1563925
donny3
Posté le 23-05-2007 à 13:09:31  profilanswer
 

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

n°1563929
Aricoh
gentil mais fo po pousser
Posté le 23-05-2007 à 13:11:55  profilanswer
 

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.
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


 
C'est la solution la plus simple  :jap:  

mood
Publicité
Posté le 23-05-2007 à 13:11:55  profilanswer
 

n°1582722
dreameddea​th
Posté le 05-07-2007 à 10:12:45  profilanswer
 

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

n°1583076
matafan
Posté le 06-07-2007 à 08:52:18  profilanswer
 

perl -i permet de modifier directement le fichier que tu lis.

n°1583082
anapajari
s/travail/glanding on hfr/gs;
Posté le 06-07-2007 à 09:06:09  profilanswer
 

hé les kidz, les "ups" deux mois plus tard c'est peut-être plus la peine ;)

n°1583123
Elmoricq
Modérateur
Posté le 06-07-2007 à 10:39:30  profilanswer
 

dreameddeath a écrit :

Mais sed est aussi efficace pour ce genre d'opération...


 
k, lol [:el g]
 
Chez Solaris en tout cas, traiter un fichier de 300Mo+ prends 10min en sed, 10s en PERL.

n°2113563
yozyoz21
Posté le 28-11-2011 à 13:38:26  profilanswer
 

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).

n°2113655
gilou
Modérateur
Modzilla
Posté le 28-11-2011 à 17:04:04  profilanswer
 

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+,


Message édité par gilou le 28-11-2011 à 17:04:20

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Perl

  remplacer un ligne dans un fichier

 

Sujets relatifs
[Resolu] VB 2005 Express -> demande code pour écrire ds le RegistreRetour à la ligne précédente
Savoir si un fichier est videPROJET CREATION JEU EN LIGNE
Fenetre popup à l'ouverture d'un fichier pdffacture en pdf en ligne
[form] Comment choisir un fichier côté serveur ?Modifier une ligne d'un fichier et la remplacer
Remplacer une ligne par une autre dans un fichier texteRemplacer une ligne dans un fichier
Plus de sujets relatifs à : remplacer un ligne dans un fichier


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR