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 :

Quelle structure Perl pour lire file texte formaté


Sujet :

Langage Perl

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 3
    Points : 4
    Points
    4
    Par défaut Quelle structure Perl pour lire file texte formaté
    Bonjour
    Je travaille avec Perl depuis pas très longtemps
    Je dois faire la chose suivante
    J'ai un ficghier texte contenant des infos (~structure idem table bdd ) mais pour l'instant je n'ai pas mis en place de bdd sur la machine linux

    pour l'instant les infos sont stockés dans un fichier texte classique

    au début d emon script perl, j'aimerai ouvrir ce fichier et récupérer la totalité de ce fichier (pour des besoins de test) il n'est pas très gros.
    Je ne sais pas trop quelle structure perl je dois prendre
    pour être par la suite le plus proche possible d'infos issus
    soit de bdd, soit de serveur http (voiceXml)
    Je pensais éventuellement mettre en place une classe avec les attributs correspondant aux champs de mon fichier

    Est-ce une bonne idée ?. J'ai vu dans les manuels qu'il y aura une instance par objet et donc si j'ai dans mon fichier 20 lignes cela fera 20 objets (est-ce gourmand au niveau mémoire?)
    merci de vos infos

  2. #2
    Membre éprouvé Avatar de MarneusCalgarXP
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    911
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 911
    Points : 1 118
    Points
    1 118
    Par défaut
    Evidemment qu'il y aura une instance par objet, c'est la même chose avec un tableau : si il y a 20 cases, il y aura 20 emplacements mémoire occupés

    Au niveau de la mémoire, ca occupera bien entendu la taille de ton fichier texte + les handles à stocker (1 handle par objet + 1 handle par champ). Si le fichier est petit, ca ne se verra pas en mémoire.

    Le fait de passer par une classe peut-être sympa, sinon si le nombre de champs est faible, tu peux te contenter d'une simple hash (de toute facon, créer un objet en perl revient le plus souvent à créer une hash ou un tableau).



    Par exemple ici:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    my @records = ();
     
    open(FILE, $fichier);
    while (<FILE> )
    {
        my @data = split(/,/); # si la virgule est ton séparateur, sinon remplacer ;)
        my %record = {
             nom    => $data[0],
             prenom => $data[1]
        };
        push(@records, %record);
    }
    close(FILE);
    après, tu pourras accéder à tes objets de la manière suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    my %record = $records[3]; # accès au 4° record
    my $prenom = $record->prenom;
    printf("prenom : $prenom\n");
    PS: je n'ai pas eu le temps de tester, mais de mémoire, ca fonctionne de cette manière

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

    Si votre problème est réglé, n'oubliez pas Dans tous les cas

  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 MarneusCalgarXP
    PS: je n'ai pas eu le temps de tester, mais de mémoire, ca fonctionne de cette manière
    Y a pas mal de petites erreurs de sigils et autres :
    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
     
    my @records;
     
    # toujours tester si l'open() a réussi.
    open my $input, '<', $fichier
        or die "$!\n";
     
    while ( my $line = <$input> )
    {
        my @data = split /,/, $line; # si la virgule est ton séparateur, sinon remplacer ;)
        # ici ton %record aurait dû être $record, mais je vais carrément me passer d'intermédiaire
        push(@records, {
                    nom    => $data[0],
                    prenom => $data[1]
        };
    }
     
    close($input);
    Et pour accéder plus tard :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    my $record = $records[3]; # accès au 4° record
    my $prenom = $record->{prenom};
    printf("prenom : $prenom\n");
    ou :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    my %record = %{$records[3]}; # accès au 4° record
    my $prenom = $record{prenom};
    printf("prenom : $prenom\n");
    --
    Jedaï

Discussions similaires

  1. Réponses: 2
    Dernier message: 06/12/2011, 14h26
  2. Problème pour lire du texte avec Excel
    Par Blobette dans le forum C#
    Réponses: 3
    Dernier message: 28/02/2009, 14h47
  3. Quelle Structure utiliser pour un tri croissant
    Par sunp dans le forum Langage
    Réponses: 6
    Dernier message: 30/04/2008, 14h19
  4. Quelle composante utiliser pour lire une matrice
    Par Layla dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 10/02/2008, 12h31
  5. [FLASH 8] Problème pour lire un texte
    Par Halobox dans le forum Flash
    Réponses: 2
    Dernier message: 11/01/2006, 21h59

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