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

SL & STL C++ Discussion :

Lire un fichier le plus rapidement possible


Sujet :

SL & STL C++

  1. #1
    Membre éclairé Avatar de Rodrigue
    Inscrit en
    Août 2002
    Messages
    487
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 487
    Par défaut Lire un fichier le plus rapidement possible
    Bonjour,

    Comment lire un fichier texte le plus rapidement possible à l'aide de la STL? Les accès disque ralentissent mon progamme, si je chargeais le fichier directement dans un buffer, je pourrais accélérer le traitement non?

    Cordialement,
    Rodrigue

  2. #2
    Membre émérite Avatar de reggae
    Profil pro
    Inscrit en
    Août 2005
    Messages
    773
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2005
    Messages : 773
    Par défaut
    http://c.developpez.com/faq/cpp/?pag...RS_full_buffer

    A la différence près c'est que cela n'utilise pas la STL... Est-ce impératif dans ton cas?



    A+

  3. #3
    Membre éclairé Avatar de Rodrigue
    Inscrit en
    Août 2002
    Messages
    487
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 487
    Par défaut
    Merci beaucoup!

  4. #4
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    La STL ne permet pas de lire un fichier La SL oui

  5. #5
    Membre éclairé Avatar de Rodrigue
    Inscrit en
    Août 2002
    Messages
    487
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 487
    Par défaut
    Désolé de n'avoir pas répondu plus tôt (ma connexion internet est cassée à la maison ...).
    Je suppose que SL signifie Standard Library ? De quoi s'agit-il des librairies que j'utilise par défaut ? J'aimerais savoir/comprendre ce que j'utilise (pour être moins bête ).

    Merci!

  6. #6
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Oui, tu supposes bien. Cela regroupe les bibliothèques fournies en standard avec un compilo C++. La STL n'est qu'une partie, un sous-ensemble bien réduit de la bibliothèque standard.

  7. #7
    Membre éclairé Avatar de Rodrigue
    Inscrit en
    Août 2002
    Messages
    487
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 487
    Par défaut
    Je ne voudrais pas abuser de ton temps mais pourrais-tu me citer d'autres librairies appartenant à la SL ?

  8. #8
    Membre éclairé Avatar de Rodrigue
    Inscrit en
    Août 2002
    Messages
    487
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 487
    Par défaut
    La lecture de mon fichier par un buffer n'a pas accéléré la lecture de mon fichier. Je pense qu'il s'agit plus d'optimiser mes fonctions de lecture:
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    
    while(std::getline(buffer, line))
    {
    if(! line.empty())
    {
    std::istringstream iss(line);
    std::string sub;
    switch(FindToken(line))
    {
    case COMMENT:
    break;
    case VERTEX: 
    float x, y, z;
    std::getline(iss, sub, ' ');
    std::getline(iss, sub, ' '); (std::istringstream)sub >> x;
    std::getline(iss, sub, ' '); (std::istringstream)sub >> y;
    std::getline(iss, sub, ' '); (std::istringstream)sub >> z;
    this->points.push_back(gPoint3D(x,y,z));
    break;
    case VERTEX_NORMAL:
    break;
    case VERTEX_TEXTURE:
    break;
    case FACE:
    int A, B, C;
    std::getline(iss, sub, ' ');
    std::getline(iss, sub, ' '); (std::istringstream)sub >> A; A--;
    std::getline(iss, sub, ' '); (std::istringstream)sub >> B; B--;
    std::getline(iss, sub, ' '); (std::istringstream)sub >> C; C--;
    this->triangles.push_back(gTriangle3D(
    this->points[A],
    this->points[b],
    this->points[C]));
    break;
    case UNKNOWN:
    std::cerr << "[LINE " << nLine << "] Unknown: " << line << std::endl;
    break;
    } 
    }
    nLine++;
    }
    
    Et voici ma fonction FindToken:
    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
    enum Element {VERTEX, VERTEX_TEXTURE, VERTEX_NORMAL, FACE, COMMENT, UNKNOWN};
    
    inline Element gObject3D::FindToken(std::string& token)
    {
    std::string::size_type loc;
     
    loc = token.find_first_of("v ", 0);
    if(loc != std::string::npos && loc == 0)
    return (VERTEX);
    loc = token.find_first_of("vt ", 0);
    if(loc != std::string::npos && loc == 0)
    return (VERTEX_TEXTURE);
    loc = token.find_first_of("vn ", 0);
    if(loc != std::string::npos && loc == 0)
    return (VERTEX_NORMAL);
    loc = token.find_first_of("f ", 0);
    if(loc != std::string::npos && loc == 0)
    return (FACE);
    loc = token.find_first_of("#", 0);
    if(loc != std::string::npos && loc == 0)
    return (COMMENT);
    return (UNKNOWN); 
    }
    
    Je pense que je fais beaucoup de traitement pour rien!
    En fait pour l'instant, je dois détecter deux types d'objets des VERTEX ou des FACE.
    Voici un exemple de VERTEX:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    v 1.23434 2.34443 3.15009
    v %f %f %f
    et pour les FACE:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    f 56 23 11
    f %d %d %d
    Notez que je pourrais également avoir des faces avec ce format là:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    f 123/356 432/109 567/443
    PS: il s'agit de lire des objets 3D (.obj)

    Merci!
    Cordialement,
    Rodrigue

  9. #9
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Dans la SL, il y a les flux d'entrées/sorties, ceux que tu utilises ici
    Si tu veux savoir ce qui ralentit effectivement ta fonction, une seule chose à faire, profiler ton code.
    Si tu es sous Linux, regarde du côté de cachegrind, sur Windows, il y a chez AMD un bon logiciel pour les proc AMD, gratuit, et chez Intel il y a VTune, payant mais avec une démo.

  10. #10
    Membre éclairé Avatar de Rodrigue
    Inscrit en
    Août 2002
    Messages
    487
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 487
    Par défaut
    Ok merci!

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

Discussions similaires

  1. réecriture d'un fichier le plus rapide possible
    Par hassanJava dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 10/12/2010, 09h15
  2. Remplir un fichier le plus rapidement possible
    Par DrTank dans le forum Débuter
    Réponses: 5
    Dernier message: 30/07/2009, 10h03
  3. Réponses: 50
    Dernier message: 19/10/2007, 23h38
  4. [VBA-E] Ecrire un fichier texte le plus rapidement possible
    Par spileo dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 13/09/2007, 20h51
  5. Réponses: 3
    Dernier message: 02/05/2007, 23h02

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