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 :

lecture fichier dans variable


Sujet :

Langage Perl

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 9
    Points : 5
    Points
    5
    Par défaut lecture fichier dans variable
    Bonjour à tous, je cherche un équivalent perl à la fonction php file_get_contents. Je désire en fait placer tout le contenu d'un fichier dans une variable.
    Merci pour votre aide...

  2. #2
    Membre éclairé
    Avatar de GnuVince
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2004
    Messages
    679
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2004
    Messages : 679
    Points : 803
    Points
    803
    Par défaut
    Citation Envoyé par remixade
    Bonjour à tous, je cherche un équivalent perl à la fonction php file_get_contents. Je désire en fait placer tout le contenu d'un fichier dans une variable.
    Merci pour votre aide...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    open(my $fd, '<', 'foo.txt');
    my @lines = <$fd>;
    close($fd);
    my $lines = join('', @lines);
    print $lines;
    Et pour en faire une fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    sub get_file_content {
        my ($filename) = @_;
     
        open(my $fd, '<', $filename) or die("Impossible d'ouvrir $filename: $!\n");
        my @lines = <$fd>;
        close($fd);
        return join('', @lines);
    }

  3. #3
    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 GnuVince
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    open(my $fd, '<', 'foo.txt');
    my @lines = <$fd>;
    close($fd);
    my $lines = join('', @lines);
    print $lines;
    Surtout pas ! Tu lis ligne par ligne, pour ensuite jeter tous tes efforts par la fenêtre ? Sur un gros fichier tu le sentiras passer...

    L'idiôme courant serait plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    open my($fd), '<', 'foo.txt'
      or die "$!\n";
    my $content = do { local $/; <$fd> };
    Et la fonction correspondante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    sub slurp {
      my $filename = shift;
      open my($fd), '<', 'foo.txt'
        or die "$!\n";
      local $/;
      <$fd>;
    }
    Pour avoir encore plus rapide et pratique, File::Slurp du CPAN pourrait être intéressant.

    --
    Jedaï

  4. #4
    Membre éclairé
    Avatar de GnuVince
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2004
    Messages
    679
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2004
    Messages : 679
    Points : 803
    Points
    803
    Par défaut
    Je viens de consulter "Perl Best Practices" et Jedaï a raison. La section en question est 10.9. Il est à noter que dans la section suivante, 10.10, Damian Conway nous dit d'utiliser le module Perl6::Slurp.

  5. #5
    Membre éclairé
    Avatar de GnuVince
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2004
    Messages
    679
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2004
    Messages : 679
    Points : 803
    Points
    803
    Par défaut
    Jedaï: tu peux m'expliquer pourquoi on utilise local plutôt que my? Je sais que local a un scope dynamique et que my a un scope lexical, mais je vois pas ce que ça changerait dans notre cas.

    Merci

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Bonjour à tous,
    Tout d'abord merci à vous pour ces réponses pleines de connaissances...
    J'ai essayé les 2 solutions et le résultat est tout à fait ce que je voulais, j'utiliserai malgré tout la 2eme solution puisque Jedai parle d'un avantage certain pour un gros fichier et c'est mon cas...

  7. #7
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 584
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 584
    Points : 2 032
    Points
    2 032
    Par défaut
    Citation Envoyé par remixade
    j'utiliserai malgré tout la 2eme solution puisque Jedai parle d'un avantage certain pour un gros fichier et c'est mon cas...
    Ok, précision importante

    Parce que sinon, la soluce de GnuVince fait bien son office sur des fichiers pas trop gros et est fréquemment usitée donc...

  8. #8
    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 GnuVince
    Jedaï: tu peux m'expliquer pourquoi on utilise local plutôt que my? Je sais que local a un scope dynamique et que my a un scope lexical, mais je vois pas ce que ça changerait dans notre cas.

    Merci
    Essaie avec my et tu verras le problème... $/ est une variable globale réservée, tu ne peux pas utiliser de my dessus, seulement la localiser.

    Parce que sinon, la soluce de GnuVince fait bien son office sur des fichiers pas trop gros et est fréquemment usitée donc...
    Oui bien sûr, sauf que la différence est vraiment énorme entre les deux solutions au niveau vitesse. Alors sur les petits fichiers on ne la ressent pas vraiment, mais il arrive que les fichiers grossissent...

    --
    Jedaï

  9. #9
    Membre éclairé
    Avatar de GnuVince
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2004
    Messages
    679
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2004
    Messages : 679
    Points : 803
    Points
    803
    Par défaut
    Citation Envoyé par Jedai
    Essaie avec my et tu verras le problème... $/ est une variable globale réservée, tu ne peux pas utiliser de my dessus, seulement la localiser.
    Ah merci. J'ai fait des tests hier en utilisant mes propres variables et il n'y avait pas de différence. C'est bon à savoir.

Discussions similaires

  1. [bash] Mettre le contenu d'un fichier dans une variable
    Par tipié dans le forum Shell et commandes GNU
    Réponses: 10
    Dernier message: 25/04/2024, 21h27
  2. [XL-2003] Sauvegarde chemin + fichier dans variable
    Par rehugg dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 08/12/2014, 13h08
  3. Problème lecture fichier dans une arborescence de dossiers
    Par africanwinners dans le forum Langage
    Réponses: 5
    Dernier message: 05/12/2014, 12h59
  4. Réponses: 4
    Dernier message: 24/11/2012, 14h37
  5. Transferer contenu fichier dans variable
    Par pharaonline dans le forum Langage
    Réponses: 7
    Dernier message: 16/01/2007, 15h00

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