[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
A voir également:
- [PERL] Comment écrire à la fin d'un fichier..
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Fichier bin - Guide
- Forcer la suppression d'un fichier - Guide
- Fichier rar - Guide
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
<SOURCE>
test-test-test
</SOURCE>
Perso, je ne trouve pas.
Merci d'avance.
Romain
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
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
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é
Le script
Le résultat
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:~$