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 :

[langage] Problème de taille de fichier à mettre dans


Sujet :

Langage Perl

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mai 2002
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 39
    Points : 34
    Points
    34
    Par défaut [langage] Problème de taille de fichier à mettre dans
    Bonjour

    Je fais un programme Perl sous Unix.

    Mon programme tourne correctement avec différents fichiers tests. Mais avec un gros fichier, un intermédiaire est un fichier texte de 340 Mo que je dois lire. Or quand je reviens (il met 2 jours pour en arriver la) le programme de tourne plus qu'au ralenti.

    Quand je fait "process" mon programme est en "sleep" et ne tourne qu'à 1 %.

    Je pense que c'est parce que $toto=<MON_FICHIER> à des problèmes avec la taille du fichier.

    Est qu'il y a moyen de laisser un plus grand espace pour une variable comme long en C ?

    J'ai cherché sur O'Reilly, pas de réponse (ou peut être que je ne regardais pas au bon endroit )

    Je vous remercie d'avance de vos réponses.

  2. #2
    Membre éprouvé
    Avatar de jérôme
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    591
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 591
    Points : 1 071
    Points
    1 071
    Par défaut
    Si j'ai bien compris, tu essaie de stocker dans une variable le contenu d'un fichier de 340 Mo ????
    Mais t'as combien de RAM sur ta bécane ?
    Tu ne crois pas que tu pourrais peut-être faire autrement ?

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mai 2002
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 39
    Points : 34
    Points
    34
    Par défaut
    Je ne peux pas faire autrement je dois lire ce fichier.

    Pour ce qui est de la RAM je n'en sais rien mais je pense que la station Sun doit avoir ce qui faut (je pense je n'en suis pas sur)

  4. #4
    Membre éprouvé
    Avatar de jérôme
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    591
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 591
    Points : 1 071
    Points
    1 071
    Par défaut
    J'ai bien compris que tu devais lire ce fichier, mais es-tu obligé de le lire en une seule fois ? Que dois-tu donc faire dessus qui nécéssite de le charger dans son intégralité dans la RAM ?

  5. #5
    Nouveau membre du Club
    Inscrit en
    Mai 2002
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 39
    Points : 34
    Points
    34
    Par défaut
    Après je le parse avec des expressions régulières (c'est du Perl !!! )

    pour récupérer les informations que je souhaite. Tout ne m'intéresse pas mais je suis obligé de le lire pour faire le tri.

    lire en une seule fois
    Question : est ce possible de le lire autrement ?

  6. #6
    Membre éprouvé
    Avatar de jérôme
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    591
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 591
    Points : 1 071
    Points
    1 071
    Par défaut
    Tu peux peut-être quand même le découper un peu. Si c'est un fichier qui contient du texte, même en l'ouvrant en binaire (forcément sous Unix), tu peut repérer des fins de ligne. A ce moment là tu récupères tous les 10 retours à la ligne par exemple et tu bosses dessus, ensuite tu continues avec les 10 suivants etc...
    Essaie de lancer un éditeur comme VI ou un autre et de le faire analyser ton fichier de 340 Mo et regarde dans les process comment il accède à la mémoire, tu verras qu'il n'utilise certainement pas toute la RAM pour lire ton fichier.

  7. #7
    Nouveau membre du Club
    Inscrit en
    Mai 2002
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 39
    Points : 34
    Points
    34
    Par défaut
    Je te remercie je vais essayer ça ne me semble pas très simple mais je suis persévérant.

    Merci

  8. #8
    En attente de confirmation mail
    Inscrit en
    Mars 2002
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 67
    Points : 75
    Points
    75
    Par défaut
    tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $toto=<MON_FICHIER>
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    @toto=<MON_FICHIER>
    dans le 1er cas, il ne stocke dans le scalaire $toto qu'une ligne, et non pas tout ton fichier: à moins que celui-ci ne contienne aucun caractère de fin de ligne???
    dans le second cas il stocke tout le fichier dans le tableau, ce qui, compte tenu de la taille de ton fichier, n'est pas à faire.

    si tu fais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    while (<MON_FICHIER>)  {
          $ligne	= $_;
     
    		$ligne 	=~ s/\n$//;
    		$ligne 	=~ s/\r$//;
     ...
    }
    je ne vois pas pourquoi tu aurais un problème avec un gros fichier...

  9. #9
    Nouveau membre du Club
    Inscrit en
    Mai 2002
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 39
    Points : 34
    Points
    34
    Par défaut
    Je fais $toto=<MON_FICHIER> et je t'assure que tout le fichier est lu et il contient des \n (j'en suis sur).

    Pour ce qui de pourquoi ca ne marcherait pas avec un gros fichier, je n'en sais rien du tout c'est pour ca que j'ai fait un post. Mais si ça se trouve le problème n'est pas là, mais j'ai réfléchi (dans ma tête ) et je n'ai rien vu d'autres.

    Je te remercie pour ton aide.

  10. #10
    vic
    vic est déconnecté
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2002
    Messages
    431
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 431
    Points : 498
    Points
    498
    Par défaut
    Si tu essaies de lire un fichier au format DOS depuis un unix (ou inversemnt) il se peut qu'il ne retrouve pas les caractères de fin de ligne, dans ce cas utilise la variable $/ pour préciser explicitement où les lignes doivent s'arrêter.

    Exemple :
    vic

  11. #11
    Nouveau membre du Club
    Inscrit en
    Mai 2002
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 39
    Points : 34
    Points
    34
    Par défaut
    Merci

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 30/08/2007, 17h55
  2. Réponses: 8
    Dernier message: 13/03/2007, 13h59
  3. Réponses: 4
    Dernier message: 08/09/2006, 11h21
  4. Problème de taille d'un JPanel dans un GridLayout
    Par ZamZam340 dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 30/04/2006, 20h56
  5. Réponses: 1
    Dernier message: 26/04/2006, 12h01

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