lecture de fichier un peu complexe

lecture de fichier un peu complexe - C++ - Programmation

Marsh Posté le 21-03-2004 à 14:26:18    

salut
 
je vous présente brievement mon probleme :
j'ai un fichier du type
float  float  ...  float  float
float  float  ...  float  float
...
 
...
float  float  ...  float  float
 
(en clair, un certain nombre - que je ne connais pas - de float par ligne, et un certain nombre de lignes inconnu lui aussi)
et j'aimerais mettre ca dans un tableau à deux dimensions de float.
Mettre les données dans le tableau, je sais faire, mais ce que je ne sais pas faire, c'est lire le fichier correctement.
Pour l'instant, mon code est :
 

Code :
  1. std::ifstream fichier ("donnees.txt" );
  2.   std::string ligne;
  3.   float x;
  4.   while (!fichier.eof())
  5.     {
  6.       fichier.getline (ligne, sizeof(ligne-1));
  7.       std::istringstream flig (ligne);
  8.       while (flig >> x)
  9.         std::cout << x;
  10.     }


 
mais ca ne marche pas :

Citation :

g++ -c fonctions.cc -o fonctions.o
fonctions.cc: In function `configuration init_conf()':
fonctions.cc:82: no match for `std::string& - int' operator
fonctions.cc:83: variable `std::istringstream flig' has initializer but incomplete type
make: *** [fonctions.o] Erreur 1


 
vous pourriez me dire ce qui ne va pas dans mon code et comment le modifier ?
merci :)

Reply

Marsh Posté le 21-03-2004 à 14:26:18   

Reply

Marsh Posté le 21-03-2004 à 14:31:06    

mauvais, très mauvais, surtout le "sizeof(ligne-1)" quite pose problème
 
 

Code :
  1. while(std::getline(std::cin, ligne))
  2. {
  3.    std::istringstream flig(ligne);
  4.     while (flig >> x)
  5.             std::cout << x;
  6. }


 
tu ferais bien aussi de vérifier que le nombre d'enregistremaent par ligne est correcte. regarde aussi du coté de std::copy. comme  ça tu copie du istringstream dans un conteneur, et si la taille du conteneur n'est pas celle attendue apprès copie, y a eu un problème

Reply

Marsh Posté le 21-03-2004 à 14:42:19    

merci de ta réponse rapide :)
 
j'ai mis ton code à la place du mien et ca enlève effectivement une erreur, mais il en reste une :

Citation :


g++ -c fonctions.cc -o fonctions.o
fonctions.cc: In function `configuration init_conf()':
fonctions.cc:82: variable `std::istringstream flig' has initializer but incomplete type
make: *** [fonctions.o] Erreur 1


 
d'autre part, je suis débutant en C++ donc je ne comprend pas ce que tu dis à la fin de ton message. J'ai fait pas mal de recherches sur internet mais je n'ai rien trouvé de très clair sur tout ce qui est istringstream.

Reply

Marsh Posté le 21-03-2004 à 14:43:12    

#include <sstream> ?

Reply

Marsh Posté le 21-03-2004 à 14:44:00    

ok, alors laisse tomber, des que t'as régler ton problème, continue comme ça. sinon tu sais que tu n'est pas obligé de passer par un istringstream intermédiaire

Reply

Marsh Posté le 21-03-2004 à 14:49:22    

Taz a écrit :

#include <sstream> ?


 
effectivement, ca aide
 
mais par contre ca ne marche toujours pas :

Code :
  1. std::cout << "ok" << std::endl;
  2.   while(std::getline(std::cin, ligne))
  3.     {
  4.       std::cout << "ok" << std::endl;
  5.       std::istringstream flig(ligne);
  6.       while (flig >> x)
  7.         std::cout << x;
  8.     }


 
le premier ok s'affiche mais le deuxieme ne s'affiche jamais et le programme continue à tourner sans jamais s'arreter. Tu vois ce qui pourrait bloquer ?

Reply

Marsh Posté le 21-03-2004 à 14:50:37    

std::getline(std::cin,
 
 
j'ai pas fait gaffe que tu lisais depuis un fichier, j'ai mis cin à la place. remplace std::cin par ton std::ifstream

Reply

Marsh Posté le 21-03-2004 à 15:11:46    

effectivement ca marche :)
merci beaucoup pour ton aide !!

Reply

Marsh Posté le 21-03-2004 à 16:03:17    

salut moi aussi je suis débutant, vous n'auriez pas un cours sur comment lire et ecrire dans un fichier? je sais le faire en c, mais pas en c++.  
 
merci


---------------
Découvre le HFRcoin ✈ - smilies
Reply

Marsh Posté le 21-03-2004 à 16:10:45    

fais une recherche (dans le bibliolinks)
 
prends tout ce qui se termine par stream.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed