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 :

recuperer des données .txt dans un tableau


Sujet :

C++

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 4
    Points : 1
    Points
    1
    Par défaut recuperer des données .txt dans un tableau
    Bonjour à tous,

    j'ai un fichier .txt constitué de deux lignes du type :

    4 5 1 6 6 6
    8 5 4 3 3 3

    j'aimerais pouvoir (et savoir si c'etait possible) récuperer ces données en pointant le txt et les inserer dans un tableau identique à ces chiffres (2 lignes et 6 colonnes).

    Est-ce d'une part possible et si oui pourriez vous me dire ou m'orienter sur la façon de proceder.

    Merci à tous

    flo

  2. #2
    Membre chevronné
    Avatar de Joel F
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Septembre 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2002
    Messages : 918
    Points : 1 921
    Points
    1 921
    Par défaut
    tu lis le ficheir ligne par ligne dans une std::strign en utilsiant std::getline
    Tu parse ta ligne avec std::ostringstream et tu mets chaque valeur extraite dans un std::vector de int. Une fois la ligne fini tu insére ce std::vector<int> dans un std::vector<std::vector<int>> et tu passes au lignes suivantes.

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    merci beaucoup,
    je regarde ça au plus vite

  4. #4
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 612
    Points : 30 612
    Points
    30 612
    Par défaut
    Salut,

    Tu peux d'ailleurs te simplifier un peu la tâche envisageant le fait que si tu dois créer un tableau de X lignes contenant chacune Y colonnes, tu peux également gérer les élément avec un tableau contenant... X * Y éléments.

    La formule pour récupérer l'élément se trouvant à la ligne L et à la colonne C serait alors L*X + Y.

    Au final, tu utiliserais donc un simple std::vector<int> (au lieu d'un std::vector<std::vector<int> > )dans lequel tu placerais tous les éléments de manière "classique", et tu te contenterais de créer une fonction proche de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int getItem(size_t line, size_t col)
    {
        return tab[line* nbrCol + col];
    }
    où tab est le vecteur en question et nbrCol le nombre de colonne par ligne
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  5. #5
    Membre chevronné
    Avatar de Joel F
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Septembre 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2002
    Messages : 918
    Points : 1 921
    Points
    1 921
    Par défaut
    :s pas de tableau 2D aggrégé comme ceci v_v.
    Va falloir que je brule une chèvre dans un temple vaudou pour que ces mauvaises manières disparaissent :E

    Franchement, si y a besoin de perf, allocation NRC. Icic, y a 3x2 truc, un vector de vector est beaucoup beacuoup plus simple.

  6. #6
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    j'essaye la premiere solution mais je n'y arrive pas du tout

    pourriez vous me montrer un exemple de code car la je bloque totalement

    merci

  7. #7
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 612
    Points : 30 612
    Points
    30 612
    Par défaut
    Pour la proposition de joel (je décide ici de lire l'intégralité du fichier ligne par ligne, pour le cas où il y en aurait plus que deux
    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
    std::vector<std::vector<int> > result;
    std::ifstream ifs("fichier.txt");
    std::string str;
    while(std::getline(ifs,str)) // tant qu'il y a une ligne à lire
    {
        std::vector<int> temp; // on crée un tableau d'entiers
        std::stringstream ss; // on crée un flux de conversion
        ss<< str; // que l'on rempli avec la chaine lue
        int i;
        while(ss>> i) // tant que l'on peut lire un entier dans la ligne
        {
            temp.push_back(i); // on l'insere dans le tableau temporaire
        }
        result.push_back(temp); // on insère le tableau temporaire dans le
                                // tableau de résultat.
    }
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  8. #8
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    merci beaucoup.

    Cependant il y a une subtilité (qui ne doit pas en être une d'ailleurs) que je n'ai pas du bien comprendre

    lorsque je lance ce bout de code, il me lance des erreurs

    C:\Documents and Settings\Ghost2\Bureau\testc++\Nouveau dossier (4)\try\main.cpp|1|error: expected constructor, destructor, or type conversion before '<' token|
    C:\Documents and Settings\Ghost2\Bureau\testc++\Nouveau dossier (4)\try\main.cpp|2|error: 'ifstream' in namespace 'std' does not name a type|
    C:\Documents and Settings\Ghost2\Bureau\testc++\Nouveau dossier (4)\try\main.cpp|3|error: 'string' in namespace 'std' does not name a type|
    C:\Documents and Settings\Ghost2\Bureau\testc++\Nouveau dossier (4)\try\main.cpp|4|error: expected unqualified-id before 'while'|
    ||=== Build finished: 4 errors, 0 warnings ===|


    je crois que je ne suis définitivement pas fait pour le cpp moi

    Dans tout les cas, merci

  9. #9
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 612
    Points : 30 612
    Points
    30 612
    Par défaut
    A vrai dire, le code n'est pas complet (autrement, j'aurais fourni une fonction complète ), et les erreurs que tu obtiens sont sans doute due à l'absence d'inclusion de fichiers d'en-têtes requis.

    • Pour pouvoir déclarer une variable de type std::vector, tu dois inclure le fichier d'en-tête... <vector>
    • Pour pouvoir manipuler les flux de fichiers (ifstream et ofstream), tu dois inclure soit le fichier d'en-tête <fstream> (qui fournit directement les deux classes en question) soit le fichier d'en-tête <ifstream> (pour les flux "entrants") ou le fichier d'en-tête <ofstream> (pour les flux "sortants").
    Une fois les fichiers requis inclus, les premières erreurs seront corrigées, et il y a de fortes chances pour que les erreurs suivantes soient "corrigées en cascade" car le compilateur a tendance à ne pas s'arrêter tout de suite lorsqu'il rencontre une erreur, et que la "non définition" d'un symbole à son niveau peut occasionner de nouvelles erreurs justement parce... qu'il ne connait pas le dit symbole
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

Discussions similaires

  1. Réponses: 9
    Dernier message: 13/12/2009, 13h28
  2. Réponses: 1
    Dernier message: 28/11/2009, 19h20
  3. [ZF 1.6] Affichage des données récupérées dans un tableau
    Par MaT$oN dans le forum Zend_Db
    Réponses: 4
    Dernier message: 10/03/2009, 09h32
  4. Réponses: 3
    Dernier message: 24/08/2008, 03h30
  5. Réponses: 1
    Dernier message: 09/07/2007, 17h13

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