[PERL] Comment écrire à la fin d'un fichier..

Fermé
Barichon Messages postés 19 Date d'inscription mardi 29 septembre 2009 Statut Membre Dernière intervention 24 novembre 2009 - 24 nov. 2009 à 15:31
 lami20j - 2 déc. 2009 à 10:20
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:

#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:

7 réponses

Barichon Messages postés 19 Date d'inscription mardi 29 septembre 2009 Statut Membre Dernière intervention 24 novembre 2009
24 nov. 2009 à 15:54
Pour aider dans votre aide, résultat attendu:

<SOURCE>
test-test-test
</SOURCE>

Perso, je ne trouve pas.


Merci d'avance.

Romain
0
toto1983 Messages postés 205 Date d'inscription samedi 16 mai 2009 Statut Membre Dernière intervention 25 mars 2010 13
24 nov. 2009 à 15:59
Peut être ta commande de sortie qui va pas ? mauvaise synthaxe ou pas adaptée ?
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
24 nov. 2009 à 16:01
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
0
Barichon Messages postés 19 Date d'inscription mardi 29 septembre 2009 Statut Membre Dernière intervention 24 novembre 2009
24 nov. 2009 à 16:01
merci de ta réponse,

Je penses pas je fais un banal close FD;

...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Barichon Messages postés 19 Date d'inscription mardi 29 septembre 2009 Statut Membre Dernière intervention 24 novembre 2009
24 nov. 2009 à 17:29
Personne n'est en mesure de m'aider svp ?
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
25 nov. 2009 à 11:03
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
0
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:~$ 
0