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 :

écrire au début et a la fin d'un fichier


Sujet :

Langage Perl

  1. #1
    Membre régulier
    Homme Profil pro
    dev
    Inscrit en
    Avril 2011
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : dev
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 174
    Points : 110
    Points
    110
    Par défaut écrire au début et a la fin d'un fichier
    bonjour,

    J'ai une question simple je crois, comment on peut écrire des ligne au début d'un fichier et a la fin, donc sans toucher au continue.
    et j'ai meme trouver quelque diffirence sur la manière d'ouverture par exemple j'ai trouvé sur un site quand on met +> sa veut dire écriture en fin de fichier
    et quand on met <+ permet d'écrire au début du fichier alors que ici j'ai trouvé que +< lecture et écriture en ajout mais +> ecraser !!!!
    merci de votre aide

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 221
    Points : 207
    Points
    207
    Par défaut
    Salut,

    En perl, il n'est pas "naturel" de modifier un fichier, il y a cependant des modules pour cela
    il y a un post qui traitait de cela:
    http://www.developpez.net/forums/d10...utres-fichier/


    Le mieux c'est de lire le fichier et le stocker dans un tableau (chaque ligne du fichier sera une entrée dans le tableau) à condition tout de même que le fichier en question ne soit pas trop grand.
    Ensuite utilise "push" pour ajouter un élément à la fin, ou "unshift" pour en ajouter au début.

    Enfin on écrit le tableau dans un nouveau fichier

  3. #3
    Membre régulier
    Homme Profil pro
    dev
    Inscrit en
    Avril 2011
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : dev
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 174
    Points : 110
    Points
    110
    Par défaut
    oui, merci j'ai pensé a sa mais enfaite le fichier traité à au minimum 3000 ligne donc, je ne sais pas si sa sera pas un peut lang sachant que d'autre fichier dépasse largement les 3000 ligne.
    merci

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 221
    Points : 207
    Points
    207
    Par défaut
    3000 ligne ça passe facile.

    Mais à y réfléchir y'a même pas besoin de stocker le fichier dans un tableau.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    open(IN, "<monfichier");
    open(OUT, ">monfichier");
     
    print OUT "ajout d'une ligne en début";
     
    while (my $ligne = <IN>)
    {
        print OUT $ligne;
    }
     
    print OUT "ajout d'une ligne à la fin";

  5. #5
    Membre régulier
    Homme Profil pro
    dev
    Inscrit en
    Avril 2011
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : dev
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 174
    Points : 110
    Points
    110
    Par défaut
    alors, j'ai essayé le code, et enfaite sa modifie pas le fichier mais sa l'écrase !!

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 221
    Points : 207
    Points
    207
    Par défaut
    Oui j'ai écrit le code rapido....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    open(IN, "<monfichier-entree");
    open(OUT, ">monfichier-sortie");
    Mais par défaut perl ne sais pas modifier un fichier, il sait les lire et en créer

    Le principe est donc
    1) de lire le fichier source
    2) de réécrire un nouveau fichier avec ce que tu veux dedans

  7. #7
    Membre régulier
    Homme Profil pro
    dev
    Inscrit en
    Avril 2011
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : dev
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 174
    Points : 110
    Points
    110
    Par défaut
    merci, j'avoue que c'est pas aussi difficile
    merci encore

  8. #8
    Membre régulier
    Homme Profil pro
    dev
    Inscrit en
    Avril 2011
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : dev
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 174
    Points : 110
    Points
    110
    Par défaut
    Enfaite je pense le plus simple c'est de crée un fichier temporaire et puis recopié dans le fichier d'entrée car le nom du fichier doit etre fix,

  9. #9
    Membre régulier
    Homme Profil pro
    dev
    Inscrit en
    Avril 2011
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : dev
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 174
    Points : 110
    Points
    110
    Par défaut
    J'ai du mal à ecrire sur un fichier temporaire, voila se que j'ai met comme code mais sa marche pas
    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
    use File::Temp qw(tempfile);
    my($tmp, $tempname) =tempfile();
    open ( $IN, '<',"C:/Users/u395591/Desktop/file.txt");
    open ( $tmp, '>',$tempname);
     
    print {$tmp} "jajaajajajajajaja\n";
     
    while (my $ligne = <IN>)
    {
        print {$tmp} $ligne;
    }
     
    print {$tmp}"gogogogogogooooooo\n";
    close (IN);
    close $tmp;
     
    open ( $IN, '>',"C:/Users/u395591/Desktop/file.txt");
    open ($tmp, '<',$tempname);
     
    while(my $ligne = <$tmp>)
    {
        print IN $ligne;
    }

  10. #10
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Ton code est erroné : tu as utilisé un scalaire pour stocker ton file handle, et tu dois utiliser ce scalaire pour lire et fermer le fichier.
    Par ailleurs, si tu utilises un scalaire pour stocker un file handle, il faut impérativement qu'il soit "undef" avant l'appel à open (ajout de undef $IN dans ton code).
    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
    25
     
    use File::Temp qw(tempfile);
    my($tmp, $tempname) =tempfile();
    open ( $IN, '<',"C:/Users/u395591/Desktop/file.txt");
    open ( $tmp, '>',$tempname);
     
    print {$tmp} "jajaajajajajajaja\n";
     
    while (my $ligne = <$IN>)
    {
        print {$tmp} $ligne;
    }
     
    print {$tmp}"gogogogogogooooooo\n";
    close ($IN);
    close $tmp;
     
    undef $IN;
    open ( $IN, '>',"C:/Users/u395591/Desktop/file.txt");
    open ($tmp, '<',$tempname);
     
    while(my $ligne = <$tmp>)
    {
        print { $IN } $ligne;
    }
    Sinon, il y a une manière plus simple de procéder :

    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
    use File::Temp qw/ :POSIX /;
     
    $file = "C:/Users/u395591/Desktop/file.txt";
    $tmpfile = tmpnam();
    rename $file, $tmpfile;
    open my $IN, "<", $tmpfile;
    open my $OUT, ">", $file;
     
    print {$OUT} "jajaajajajajajaja\n";
     
    while (my $ligne = <$IN>)
    {
        print {$OUT} $ligne;
    }
     
    print {$OUT}"gogogogogogooooooo\n";
     
    close $IN;
    close $OUT;
    (je n'ai pas vérifier le code : fait une copie de sauvegarde avant d'utiliser le script).

    Le principe de cet algo est simple : on renomme le fichier d'origine dans un fichier temporaire. On ouvre le fichier temporaire en lecture et le fichier original en écriture et on boucle pour écriture le nouveau fichier.
    A la fin, on peut supprimer le fichier temporaire (fonction unlink) ou le conserver comme backup.

  11. #11
    Membre régulier
    Homme Profil pro
    dev
    Inscrit en
    Avril 2011
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : dev
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 174
    Points : 110
    Points
    110
    Par défaut
    Merci, c'est exactement se que je recherchais,

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Écrire au début du fichier
    Par Nayila dans le forum Langage
    Réponses: 4
    Dernier message: 26/10/2008, 09h14
  2. fwrite : Comment écrire à la fin d'un fichier?
    Par philipina dans le forum Débuter
    Réponses: 5
    Dernier message: 19/08/2008, 16h10
  3. Réponses: 19
    Dernier message: 10/07/2007, 09h24
  4. écrire au début d'un fichier sans l'écraser
    Par Davboc dans le forum Langage
    Réponses: 11
    Dernier message: 30/12/2005, 01h48
  5. Insertion en début et non en fin de base ?
    Par sourcelab dans le forum Requêtes
    Réponses: 6
    Dernier message: 12/10/2005, 14h23

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