[PERL] Comment écrire à la fin d'un fichier..
Barichon
Messages postés
19
Date d'inscription
Statut
Membre
Dernière intervention
-
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
- Fichier rar - Guide
- Forcer la suppression d'un fichier - 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:~$