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 C++ Discussion :

Lecture de données à partir d'un fichier texte dans une matrice


Sujet :

Langage C++

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Chercheur en informatique
    Inscrit en
    Février 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Février 2013
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Lecture de données à partir d'un fichier texte dans une matrice
    Bonsoir,

    J'ai organisé un bloc d'informations comme suit:
    [nombres de données à stocker
    les données]

    Le fichier dont je dispose contient plusieurs de ces blocs, ce qui diffère d'un bloc à l'autre, est le nombre de données à stocker. Chaque bloc est séparé de l'autre par une ligne vide.

    Maintenant, je cherche à construire une fonction qui fera comme suit:

    1- Lire le nombre de données à stocker
    2- Allouer dynamiquement la mémoire pour un tableau de type vector
    3- Stocke les données
    4-Répete la meme chose jusqu'à ce qu'il ne reste aucun bloc.

    Tous ces tableaux doivent me former une matrice de type vector de vector.

    Si déjà ce que je dis est possible, le problème que je rencontre et que je ne sais pas pas comment à chaque fois que je vais lire du fichier le nombre de données, réserver la mémoire au vector. Car je suis novatrice en ce qui concerne l'utilisation de la classe vector .

    Je vous remercie pour votre aide par avance

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2004
    Messages : 329
    Points : 608
    Points
    608
    Par défaut
    Il n'y a pas forcément besoin de réserver la mémoire pour un vector, c'est un tableau dynamique. Pour des raisons de performance on va en général pré-allouer le tableau, voir http://www.cplusplus.com/forum/articles/7459/ .

  3. #3
    Nouveau Candidat au Club
    Femme Profil pro
    Chercheur en informatique
    Inscrit en
    Février 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Février 2013
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Merci pour le lien.

    D'après ce que j'ai compris mon code va ressembler à ceci:
    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
    #include <iostream>
    #include <vector>
    using namespace std;
     
    #define height 10
     
    int main () {
    vector <vector <double>> tab;
    tab.resize(height);
    //Répeter pour chaque bloc disponible {
    //lire le nombre de données à insérer à partir du fichier et le mettre dans la variable n
    tab[0].resize(n);
    //mettre les données dans le tableau }
     
    return 0; }
    Est-ce juste?
    Si oui, maintenant lorsque je vais faire la lecture du premier nombre de données, comment je vais mettre ces données dans tab? et comment je vais pouvoir répeter ça pour chaque bloc dont je dispose, c'est un problème d'organiser la lecture du fichier pour moi.

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Game Designer
    Inscrit en
    Mars 2011
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Game Designer

    Informations forums :
    Inscription : Mars 2011
    Messages : 39
    Points : 34
    Points
    34
    Par défaut
    Pour lire le fichier, je te conseille la lecture de plusieurs pages, tu devrais trouver les données dont tu as besoin.

    operator>>

    fstream

    stringstream

    iterator

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2004
    Messages : 329
    Points : 608
    Points
    608
    Par défaut
    Citation Envoyé par Rokaya_mar Voir le message
    Merci pour le lien.

    D'après ce que j'ai compris mon code va ressembler à ceci:
    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
    #include <iostream>
    #include <vector>
    using namespace std;
     
    #define height 10
     
    int main () {
    vector <vector <double>> tab;
    tab.resize(height);
    //Répeter pour chaque bloc disponible {
    //lire le nombre de données à insérer à partir du fichier et le mettre dans la variable n
    tab[0].resize(n);
    //mettre les données dans le tableau }
     
    return 0; }
    Est-ce juste?
    Plus ou moins... je suppose que tu sais qu'il y aura 10 "blocks" dans le fichier d'où le #define ? Est-ce que ce n'est pas à lire dans le fichier ?

    Si oui, maintenant lorsque je vais faire la lecture du premier nombre de données, comment je vais mettre ces données dans tab? et comment je vais pouvoir répeter ça pour chaque bloc dont je dispose, c'est un problème d'organiser la lecture du fichier pour moi.

    Il reste à ecrire une boucle qui parcoure ton fichier, lit les données, et dimensionne chaque dimension interne du vecteur, puis une boucle qui lit les donnée et rempli le vecteur. Ça peut ressembler à cette structure:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    for(int i =0; i<height;i++) {
      // 
      int width; 
      ....  // lire width depuis le fichier
      tab[i].resize(width);
      for(int j=0; j<width; j++) {
        double data;
        ... // lire une donnée depuis le fichier
        tab[i][j]= data;
      }
    }
    PS: essaye d'indenter ton code :-)

  6. #6
    Nouveau Candidat au Club
    Femme Profil pro
    Chercheur en informatique
    Inscrit en
    Février 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Février 2013
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par Joker-eph Voir le message
    Plus ou moins... je suppose que tu sais qu'il y aura 10 "blocks" dans le fichier d'où le #define ? Est-ce que ce n'est pas à lire dans le fichier ?
    Je peux soit le définir par avance soit le lire à partir du fichier c'est optionnelle pour moi.

    Il reste à ecrire une boucle qui parcoure ton fichier, lit les données, et dimensionne chaque dimension interne du vecteur, puis une boucle qui lit les donnée et rempli le vecteur. Ça peut ressembler à cette structure:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    for(int i =0; i<height;i++) {
      // 
      int width; 
      ....  // lire width depuis le fichier
      tab[i].resize(width);
      for(int j=0; j<width; j++) {
        double data;
        ... // lire une donnée depuis le fichier
        tab[i][j]= data;
      }
    }
    PS: essaye d'indenter ton code :-)
    Finalement, graçe au portion du code que tu m'a proposé, j'ai pu écrire le code qu'il me faut et qui est comme suit

    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
     
    string che;
    double data;
    cout<<" donnez le lien du fichier à lire :"<<endl;
    cin>>che;
    ifstream fin;
    fin.open(che.c_str());
    if (fin) cout<<"l'ouverture est réussite"<<endl;
    else {cout<<"Impossible d'ouvrir le fichier"<<endl; exit(1);}
    for(int i =0; i<height;i++){
    fin>>width;
    tab[i].resize(width);
    for(int j=0; j<width; j++) {
        fin>>data;
        tab[i][j]= data;
      }
    }
    Merci beaucoup Joker-eph.

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

Discussions similaires

  1. [Débutant] Charger un fichier texte dans une matrice de nombres (fonction load).
    Par Invité dans le forum MATLAB
    Réponses: 1
    Dernier message: 09/07/2010, 17h54
  2. Caractères fichier texte dans une matrice
    Par Dabech dans le forum Débuter
    Réponses: 3
    Dernier message: 13/05/2008, 18h40
  3. Réponses: 2
    Dernier message: 19/03/2008, 15h51
  4. ajout de données à partir d'un fichier texte
    Par drakenzara dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 14/04/2006, 13h39
  5. Réponses: 3
    Dernier message: 29/03/2006, 15h23

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