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

C++ Discussion :

Lecture d'un tableau contenu dans un fichier


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 91
    Points : 50
    Points
    50
    Par défaut Lecture d'un tableau contenu dans un fichier
    Bonjour à tous,

    J'ai en entrée de mon application un fichier contenant un tableau de valeurs (taille N*N pour le moment).

    J'ai problème au niveau du temps d'exécution. avec N = 201, ma lecture de fichier prend 250ms.

    Première méthode :
    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
     
        std::ifstream file(_fileName.c_str());
        if(!file)
            return;
     
        // find size of array
        int arraySize = std::count( std::istreambuf_iterator<char>( file ), std::istreambuf_iterator<char>(), '\n' );
        file.seekg(0, std::ios::beg);
     
        std::vector< double > array( arraySize * arraySize );
     
        std::string line;
        int index = 0;
        double tempVal;
        while(std::getline(file, line))
        {
            std::istringstream iss(line);
            //while( iss >> array[index] )
            //    ++index;
            while( iss >> tempVal )
                array.at(index++) = tempVal;
        }
    Deuxième méthode :
    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
     
       std::ifstream file(_fileName.c_str());
        if(!file)
            return;
     
        // find size of array
        int arraySize = std::count( std::istreambuf_iterator<char>( file ), std::istreambuf_iterator<char>(), '\n' );
        file.seekg(0, std::ios::beg);
     
        std::vector< double > array( arraySize * arraySize );
     
        std::stringstream buffer;
        buffer << file.rdbuf();
     
        double temp;
        int index = 0;
        while(buffer >> array[index++]);
    Troisième méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
       std::ifstream file(_fileName.c_str());
        if(!file)
            return;
     
        std::vector< double > array;
     
        std::stringstream buffer;
        buffer << file.rdbuf();
     
        double temp;
        while(buffer >> temp)
            array.push_back(temp);

    Ces trois versions prennent le même temps.

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 91
    Points : 50
    Points
    50
    Par défaut
    qques idées qui mettent le même temps :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        std::vector< double > array;
        for(double temp; file >> temp;)
            array.push_back(temp);
    ou encore :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        std::istream_iterator<double> first(file), last;
        std::vector<double> array;
        std::copy(first, last, std::back_inserter(array));
    Le temps est toujours le même.

    Aucune idée ?

  3. #3
    Membre éclairé
    Avatar de Ekleog
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 448
    Points : 879
    Points
    879
    Par défaut
    As-tu envisagé qu'il soit possible que ce soit le temps de lecture du fichier sur le disque ?

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 91
    Points : 50
    Points
    50
    Par défaut
    Oui évidemment. C'est ce qui me semblerait logique étant donné que chaque méthode prend le même temps.
    Mais je demande à tout hasard si quelqu'un aurait une solution.

  5. #5
    Membre éclairé
    Avatar de Ekleog
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 448
    Points : 879
    Points
    879
    Par défaut
    As-tu essayé de lire le fichier depuis un ramdisk ? Ceci permettrait de savoir si c'est le temps de lecture depuis le disque ou bien le temps de parsing des double qui est en cause.

Discussions similaires

  1. Lecture des informations contenues dans les fichiers CDA de Windows
    Par DelphiCool dans le forum Codes sources à télécharger
    Réponses: 0
    Dernier message: 03/02/2013, 13h53
  2. lecture de valeurs numériques contenues dans un fichier xml
    Par yasse87 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 21/04/2009, 20h13
  3. [AJAX] Lecture et affichage du contenu d'un fichier xml dans un menu deroulant
    Par undercrash dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 15/01/2008, 17h26
  4. Lecture d'un nombre binaire dans un fichier ASCII
    Par semenzato dans le forum MFC
    Réponses: 1
    Dernier message: 13/04/2006, 23h41
  5. Réponses: 5
    Dernier message: 16/03/2005, 23h17

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