IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Perl Discussion :

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


Sujet :

Langage Perl

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 11
    Points : 3
    Points
    3
    Par défaut [PERL] Comment écrire à la fin d'un fichier ?
    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

  2. #2
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    A priori tu ne veux pas "écrire dans le fichier 9 caractères avant la fin", tu veux insérer dans le fichier 9 caractères avant la fin (par ailleurs "9 caractères avant la fin" est une spécification extrêmement fragile, que t'arrive t'il si quelqu'un rajoute un saut à la ligne à la fin du fichier... Mieux vaut utiliser une regexp pour repérer le point où insérer).

    Ce problème d'insertion dans un fichier est un problème commun à tous les langages, auquel il existe plusieurs solutions, je t'invite à consulter la réponse de notre FAQ consacré à cette question.

    --
    Jedaï

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    172
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 172
    Points : 208
    Points
    208
    Par défaut
    Salut,
    Citation Envoyé par Jedai Voir le message
    A priori tu ne veux pas "écrire dans le fichier 9 caractères avant la fin", tu veux insérer dans le fichier 9 caractères avant la fin
    Ben, ni un ni l'autre.
    Il veux écrire avant les 9 caractères de la fin de fichier (en fait avant </SOURCE>) la chaîne
    "test-test-test\n"
    En revanche pour les lignes vides à la fin, tu as raison.
    Pour chaque fichier, le traitement est diffèrent en fonction de sa structure, d'où l'importance d'avoir le fichier en entrée et ce qu'on veux obtenir en sortie.

    Pour barichon21

    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)

    Le fichier


    lami20j@debian:~$ cat fichier.txt

    dlfk
    kdkf
    <SOURCE>
    </SOURCE>




    lami20j@debian:~$
    Le script
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    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:~$
    --
    lami20j

  4. #4
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Citation Envoyé par lami20j Voir le message
    Ben, ni un ni l'autre.
    Il veux écrire avant les 9 caractères de la fin de fichier (en fait avant </SOURCE>)
    Oui, c'est ce qu'on appellerait "insérer" du texte avant les 9 derniers caractères...

    --
    Jedaï

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    172
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 172
    Points : 208
    Points
    208
    Par défaut
    Citation Envoyé par Jedai Voir le message
    Oui, c'est ce qu'on appellerait "insérer" du texte avant les 9 derniers caractères...

    --
    Jedaï
    Oui, comme ça t'est plus clair puisque ta phrase que j'ai cité était plutôt ambiguë (enfin pour moi)
    insérer dans le fichier 9 caractères avant la fin
    Moi j'ai lu que j'insère 9 caractères avant la fin.

    Comme il parle de l'insertion à une certaine position dans le fichier (on peut dire une assertion de largeur nulle) j'aurais plutôt formulé comme ça

    insérer dans le fichier, dans la position qui précède les 9 caractères avant la fin
    --
    lami20j

Discussions similaires

  1. fwrite : Comment écrire à la fin d'un fichier?
    Par philipina dans le forum Débuter
    Réponses: 5
    Dernier message: 19/08/2008, 16h10
  2. [Débutant] Comment écrire et lire dans un fichier
    Par jeanver dans le forum Delphi
    Réponses: 6
    Dernier message: 15/02/2007, 01h02
  3. Réponses: 4
    Dernier message: 07/11/2006, 14h02
  4. Comment écrire une section dans un fichier ini?
    Par Jayceblaster dans le forum Delphi
    Réponses: 5
    Dernier message: 26/06/2006, 14h08
  5. Réponses: 7
    Dernier message: 17/03/2006, 13h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo