slt
je ve changer la phrase d'une ligne d'un fichier texte avec une autre phrase avec perl. comment je pe faire stp?
notez que je connais le numero de la ligne.
Version imprimable
slt
je ve changer la phrase d'une ligne d'un fichier texte avec une autre phrase avec perl. comment je pe faire stp?
notez que je connais le numero de la ligne.
probleme classique mais pas si trivial que ca
tu ne peu pas modifier comme ca un fichier en son milieu (à moins que ce que tu ajoute et ce que tu enleve soit exactement de la meme taille).
La solution consiste toujours à copier un bout du fichier. La solution minimum est d'ouvire le fichier en lecture/ecriture, scanner jusqu'à la ligne concernée, lire le reste du fichier dans un buffer (ou un autre fichier si trop gros), faire un truncate, puis ajouter la nouvelle ligne et le buffer...
Si le fichier est pas tres gros le mieux est surement de le slurper entierement en memoire, faire la modif avec une regexp, puis le réécrire.
Enfin bon le plus simple, le plus optimisé, et le plus clair à ecrire et a maintenir est encore sans doute d'utiliser le module Tie::File :
http://search.cpan.org/~mjd/Tie-File-0.96/
bonjour
j'ai jamais programmer avec perl,
la derniere fois j'ai remplace une phrase d'un fichier texte par une autre phrase avec l'instruction:
perl -i -p -e 's/database dm/interface manu/g' fichier.txt
mais maintenant je ve ecraser une ligne que je connais son numero et la remplacer par une autre phrase.
merci
Si tu veux faire ça avec un one-liner, fais ça avec :
(Remplacement de la 23ème ligne par "le remplacement de ma ligne")Code:
1
2perl -i -p -e '$_ = "le remplacement de ma ligne\n" if $. == 23' fichier.txt
--
Jedaï
ouai mais ca a pas de style!
bon ok =>
Ben c'est sûr que niveau robustesse et extensibilité.... Mais bon, je n'ai pas l'impression que le posteur veuille vraiment apprendre Perl. Autant lui donner un petit one-liner (effort minimal de notre part) qui fasse ce qu'il veut. Et en espérant que ça lui donne envie d'en savoir plus ! ;)Citation:
Envoyé par pospos
(Sinon je suis d'accord que la meilleure solution est sans doute Tie::File)
--
Jedaï
bonjour
merci pour tes aides,
mais comment je pe ecrire ca sous forme d'un script qu'il a comme des arguments d'entree: la phrase a remplace et le numero de la ligne.
par exemple:
funct(la phrase a remplace, numero de la ligne ) au lieu d'ecrire:
perl -i -p -e '$_ = "la phrase a remplace" if $. ==le numero de la ligne' fichier.txt
merci
Si tu veux écrire un script Perl qui fasse ça, nous ne l'écrirons pas pour toi, essaie d'abord de le faire par toi-même, puis si tu rencontres des difficultés explique nous où ça coince et nous t'aiderons.
--
Jedaï
Code:
1
2
3
4
5
6
7
8
9
10 use strict; use warnings; use Carp; use Moose; use Catalyst; use IO::All; use Kinosearch; use Coro; system("perl -i -p -e '\$_ = "$ARGV[1]\n" if \$. == $ARGV[2]' ARGV[0]");
pospos, tu n'es pas gentil... :aie:Citation:
Envoyé par pospos
Le temps qu'il trouve et installe tous ces modules, il n'aura plus besoin de ce script... :mouarf:
--
Jedaï
merci
comment je pe l'executer sur unix avec les argument d'entree