[PERL] Comment écrire à la fin d'un fichier..
Barichon
Messages postés
19
Statut
Membre
-
lami20j -
lami20j -
Bonjour,
Je cherche un moyen d'écrire en perl à la fin d'un fichier, moins 9 caractères.
Voici mon programme, mais ça ne marche pas:
Sachant que le fichier que j'écris est de cette forme:
<SOURCE>
</SOURCE>
# d'ou le besoin de 9 caractères pour écrire avant cette balise fermante.
Merci par avance pour votre aide ;)
Romain
Je cherche un moyen d'écrire en perl à la fin d'un fichier, moins 9 caractères.
Voici mon programme, mais ça ne marche pas:
#ouverture du fichier à proprement dit:
open FD, ">> ".$config->{logfile};
#Décalage de 9 caractères avant la fin du fichier
seek FD, -9,2;
#Ecriture pour tester
print FD "test-test-test\n"
Sachant que le fichier que j'écris est de cette forme:
<SOURCE>
</SOURCE>
# d'ou le besoin de 9 caractères pour écrire avant cette balise fermante.
Merci par avance pour votre aide ;)
Romain
Configuration: Linux Mozilla 1.9.0.15
7 réponses
-
Pour aider dans votre aide, résultat attendu:
<SOURCE>
test-test-test
</SOURCE>
Perso, je ne trouve pas.
Merci d'avance.
Romain -
Peut être ta commande de sortie qui va pas ? mauvaise synthaxe ou pas adaptée ?
-
hello
ne serait-ce pas qu'après avoir "reculé" de 9, il écrase le texte, au lieu de l'insérer. le >> du open n'ajoute qu'à la fin du fichier -
merci de ta réponse,
Je penses pas je fais un banal close FD;
... -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
-
je pense qu'il faut lire chaque ligne du fichier, l'écrire en ajoutant ton texte avant d'écrire la dernière ou utiliser un outil comme sed
-
Salut,
Selon ton cas exposé voici une solution (les éventuelles lignes à la fin sont prises en compte), mais il ne faut pas généraliser la solution.
La solution ne tient pas compte des 9 caractères (en fait tu as oublié le caractère de saute de ligne et les éventuelles caractères non-imprimables qu'on ne les vois pas).
Je me suis contenté d'écrire avant la ligne </SOURCE> de la fin dans l'exemple que tu as montré (je ne dit pas de la fin de ton fichier)
Tu peux tester sur un fichier qui n'as pas des lignes vides à la fin par exemple.
Le fichier sur lequel j'ai testélami20j@debian:~$ cat fichier.txt dlfk kdkf <SOURCE> </SOURCE> lami20j@debian:~$
Le script
lami20j@debian:~$ cat insert2last.pl #!/usr/bin/perl use strict;use warnings; open F,"fichier.txt"; open FF,">fichier_resultat"; my $n=0; for(reverse <F>){ chomp; # suppression saut ligne length==0?$n++:last; # compter les lignes vides # sortir de boucle des que 1ère ligne non-vide est rencontrée } while(<F>){}; # pour la variable $. (nombre de lignes de fichier) my $i=$.-$n-2; #-1 puisque index commence à zéro #-1 pour ne pas prendre la dernière ligne non vide seek(F,0,0); #déplacement au début du fichier print FF ((<F>)[0..$i]),"test-test-test\n"; # tranche de liste jusque l'avant dernière ligne # non-vide du fichier seek(F,0,0); print FF ((<F>)[$i+1..$i+$n+1]); # tranche de liste de la dernière ligne non-vide # jusqu'à la fin de fichier __END__
Le résultat
lami20j@debian:~$ cat fichier_resultat dlfk kdkf <SOURCE> test-test-test </SOURCE> lami20j@debian:~$