Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1651 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Remplir un tableau à partir d'un fichier - ifstream -

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Remplir un tableau à partir d'un fichier - ifstream -

n°1687142
Player1979
Posté le 15-02-2008 à 21:26:11  profilanswer
 

Bonsoir,
 
Je voudrais qu'une personne puisse me trouver l'erreur dans mon code ! Je m'explique, je souhaite récupérer des données numériques (int) d'un fichier (Essai.txt) afin de remplir mon tableau tab[]. Je n'arrive pas à remplir mon tab avec les données de mon fichier. J'obtiens des 0 partout dans mon tableau.
Par la même occasion, si vous avez aussi des remarques à me faire concernant ma syntaxe en C++, n'hésitez pas.
Je vous joins mon code:
 
#include <cstdlib>
#include <fstream>
#include <iostream>
#include <string>
 
void get_min(int [], int);
using namespace std;
 
int main(void)
{
    ifstream f_entree("Essai.txt", ios::in);
////////////////////////////////////////////////////
// Vérification de la bonne ouverture du fichier //
//////////////////////////////////////////////////
    if(!f_entree)
    {
        cerr << "Erreur d'ouverture\n";
         
        system("PAUSE" );
        return (-1);
    }
////////////////////////////////////////////////
// Comptage du nombre de lignes d'un fichier //
//////////////////////////////////////////////
    int Nbr_lignes = 0;
    string line;
     
    while(getline(f_entree, line))
    {
        ++Nbr_lignes;
    }
 
//////////////////////////////////////////////
 
    int dim = Nbr_lignes;
     
////////////////////////////////////////////
// Déclaration d'un tableau dynamique 1D //
//////////////////////////////////////////    
   int *tab = new int [dim];
//////////////////////////////////////////
   
//////////////////////////////////
// Initialisation d'un tableau //
////////////////////////////////
    for(unsigned int indice = 0; indice < dim; indice++)
    {
        tab[indice] = 0;
    }
////////////////////////////////
 
///////////////////////////////////////////////////////////////
// Saisir les valeurs dans le tableau à partir d'un fichier //
/////////////////////////////////////////////////////////////
   for(int i = 0; i < dim ; i++)
 {
  f_entree >> tab[i];
 }
/////////////////////////////////////////////////////////////
    f_entree.close();
 
    get_min(tab, dim);
     
    system("PAUSE" );
    return EXIT_SUCCESS;    
}

mood
Publicité
Posté le 15-02-2008 à 21:26:11  profilanswer
 

n°1687168
bjone
Insert booze to continue
Posté le 15-02-2008 à 22:23:30  profilanswer
 

faut te replacer au début du flux avec clear()/seekg(0)
 
sinon un vector<int> ça sera mieuxe.


Message édité par bjone le 15-02-2008 à 22:25:18
n°1687254
Player1979
Posté le 16-02-2008 à 11:57:53  profilanswer
 

Merci bjone.
Je vais étudier ta piste sur clear()/seekg(0). Cpdt je ne comprends pas pourquoi ce code ne fonctionne pas car dans un autre programme j'ai utilisé cette même démarche et j'ai réussi à remplir mon tab. Mais dans celui ci non.  
Sinon en effet l'utilisation de vector<> serait mieux mais par la suite je voudrais utiliser un tableau à 2D ! Puis je donc utiliser vector<> pour constituer un tableau à 2d par exemple ? Si oui comment sera la syntaxe ? Merci
Bon samedi

n°1687259
Player1979
Posté le 16-02-2008 à 12:10:17  profilanswer
 

Ok cela a l'air de fonctionner lol.
J'ai donc rajouté ces deux lignes avant la boucle qui remplit mon tableau à partir du fichier:
    f_entree.clear();
    f_entree.seekg(0, ios::beg);
Alors maintenant, j'aimerai bien que l'on m'explique ces deux lignes, chaque terme de ces deux lignes.
Et aussi obtenir une réponse concernant donc la possibilité de construire un tableau à 2D avec vector<> (connaitre la syntaxe afin d'y parvenir).
Je vous en remercie.

n°1687267
Joel F
Real men use unique_ptr
Posté le 16-02-2008 à 12:34:37  profilanswer
 

vector c'est moche pour les tableaux multi-dim. boost::multi_array est plus approprié.

n°1687349
Player1979
Posté le 16-02-2008 à 18:43:50  profilanswer
 

Ok très bien. Je ne connais absolument pas boost::multi_array. Je vais faire quelques recherches dessus. Merci bien. et pour f_entree.clear();
    f_entree.seekg(0, ios::beg); pourriez vous m'expliquer le rôle de chaque terme afin que je puisse comprendre. Merci
Bonne soirée.

n°1687356
bjone
Insert booze to continue
Posté le 16-02-2008 à 19:18:42  profilanswer
 

et bien tu as un fichier texte ayant un (seul) entier par ligne (enfin j'espère sinon sprotch).
 
si tu comptes toutes les lignes jusqu'à la fin du fichier, ta deuxième boucle qui récupère entier par entier, sera déjà à la fin du fichier et n'aura rien à lire.
 
donc le clear() et là pour réinitialiser l'état du flux
seekg() est là pour te repositionner au début du flux. (ça échoue si le flux est en état d'erreur)
 
accessoirement, ton truc peut être bancal, car si tu as plusieurs chaines de texte représentant un entier par ligne, il y aura un nombre d'itérations différentes entre la passe de comptage de ligne et la passe de récupération des entiers, entrainant un dépassement de l'espace alloué.

n°1687367
Player1979
Posté le 16-02-2008 à 20:47:25  profilanswer
 

Merci beaucoup pour tes explications. Ils m'ont permis d'y voir plus clair.
A priori pour l'instant tout fonctionne correctement.
Par la suite, j'aurais certainement encore des questions... Je me ferai un plaisir de vous les poser sur ce forum qui est très réactif.
Merci et bonne soirée.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Remplir un tableau à partir d'un fichier - ifstream -

 

Sujets relatifs
problème allocation tableau dynamiquePb de case dans un tableau
[RESOLU] VBA EXCEL - remplissage tableauComment lancer GNUPLOT à partir d'un code en C++
Renommer fichier à l'upload[Access/ PHP] Exploiter un fichier *.mde
Export d'un tableau en htmlSuppression d'un nombre de fichier donnée
Cherche un script pour afficher un fichier csv[Résolu] Remplacer des caractères par d'autres dans un fichier texte
Plus de sujets relatifs à : Remplir un tableau à partir d'un fichier - ifstream -


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR