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 :

Changer une ligne dans un fichier


Sujet :

Langage Perl

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 102
    Points : 53
    Points
    53
    Par défaut Changer une ligne dans un fichier
    Bonjour,

    Comment faire pour changer une ligne d'un fichier, je pensais à un truc du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    open (F, ">>mon_fichier");
    while (<F>) 
    {
     @ligne= ... traitement et modification en fonction de $_ ...
    print(F,@ligne) ;
    }
    close(F);
    Merci d'avance

  2. #2
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 852
    Points : 4 759
    Points
    4 759
    Par défaut
    Salut

    Il faut comprendre dans la lecture de ton fichier, dans le cas typique et scolaire, tu lis ligne par ligne.
    Supposons que l'on veuille modifier le mot toto par tata dans le fichier suivant :
    On prendra le script suivant :
    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
    #!/usr/bin/perl -w
     
    use strict;
    use Carp;
     
    #Fichier en lecture
    open FILE,"< toto.txt" or die "$!\n";
    #Fichier en écriture
    open FILE_DEST,"> tata.txt" or die "$!\n";
    while(<FILE>){
    chomp;
    #Notre ligne en cours est dans la variable spéciale $_
    if(/toto/){
    print FILE_DEST "tata"."\n";
    }
    else {
    print $_."\n";
    }
    }
    close FILE and close FILE_DEST;
    #Ni vu ni connu !
    unlink "toto.txt" and rename ("tata.txt", "toto.txt") and unlink "tata.txt";
    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code ni le tag

    Je ne répond à aucune question technique par MP.

  3. #3
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Bonjour,
    GLDavid, si tu me le permet, il manque un guillement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    unlink "toto.txt" and rename ("tata.txt", "toto.txt") and unlink "tata.txt";

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 102
    Points : 53
    Points
    53
    Par défaut
    Salut,
    T'es obligé de passer par un autre fichier (tata.txt)?
    On peut pas changer la ligne directement dans le fichier?
    Mes fichiers sont assez gros, cela prend-t-il plus de temps de passer par un autre fichier?

    Merci

  5. #5
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 852
    Points : 4 759
    Points
    4 759
    Par défaut
    Citation Envoyé par gege2061
    Bonjour,
    GLDavid, si tu me le permet, il manque un guillement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    unlink "toto.txt" and rename ("tata.txt", "toto.txt") and unlink "tata.txt";
    Exact !
    Décidément Gégé, tu es mon correcteur officiel !

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code ni le tag

    Je ne répond à aucune question technique par MP.

  6. #6
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Citation Envoyé par GLDavid
    Décidément Gégé, tu es mon correcteur officiel !
    T'inquiète pas, parrain, c'est une façon de boucler la boucle ... hein, Gégé ?
    La FAQ Perl est par ici
    : La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !

  7. #7
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 852
    Points : 4 759
    Points
    4 759
    Par défaut
    Salut

    J'ai répondu aussi à ton thread précédent. Pour en revenir à ta question, si tes fichiers sont gros mais que tes disques durs ont la possibilité de faire une copie, alors ça passe. En Perl, à ma connaissance, tu ne peux pas ouvrir un fichier à la fois en lecture ou en écriture. Bien sûr l'on pourrait tout faire en mémoire vive, mais franchement le résultat est identique à cette méthode (attention aussi à ta quantité de RAM si tu dis que tes fichiers sont gros).

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code ni le tag

    Je ne répond à aucune question technique par MP.

  8. #8
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Citation Envoyé par 2Eurocents
    T'inquiète pas, parrain, c'est une façon de boucler la boucle ... hein, Gégé ?
    A votre servir

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 102
    Points : 53
    Points
    53
    Par défaut
    Ok, merci à vous 3!!

  10. #10
    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
    En Perl, à ma connaissance, tu ne peux pas ouvrir un fichier à la fois en lecture ou en écriture.
    Bien sûr que si !! (il suffit d'utiliser un "+<" )
    Mais ça ne répond tout de même pas à la question, parce qu'en faisant ça, tu écris sur la ligne suivante (puisque c'est là que ton pointeur est dans le fichier) et en plus tu fous un beau bordel puisque tu écris peut-être sur plusieurs ligne à la fois et...
    Bref c'est pas une bonne idée, le mode lecture écriture n'est intéressant que pour un fichier avec des champs de longueur fixe (en octets, pas en caractères, il faut se méfier d'unicode), qu'on lit avec des read et où on se balade à l'octet près avec seek.
    La bonne méthode (dans tout langage de programmation) est donc bien de passer par un fichier temporaire.

    --
    Jedaï

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 14/08/2010, 16h43
  2. [FSO] Effacer une ligne dans un fichier
    Par Johnbob dans le forum ASP
    Réponses: 4
    Dernier message: 30/05/2007, 16h23
  3. [VBA] insérer une ligne dans un fichier excel
    Par cokinoumasterflash dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 21/07/2005, 18h52
  4. [langage] Effacer une ligne dans un fichier
    Par sebi77 dans le forum Langage
    Réponses: 2
    Dernier message: 01/01/2005, 12h43
  5. Supprimer une ligne dans un fichier
    Par sbeu dans le forum Langage
    Réponses: 3
    Dernier message: 13/05/2003, 10h30

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