[RESOLU] Retour en début de fichier
Bonjour,
Dans ces lignes de code, je voudrais simplement récupérer le nombre de lignes du fichier "Spectrum_User_Defined.txt", puis ensuite récupérer les données dans une matrice qui aura pour nombre de lignes égal au nombre de lignes du fichier.
Dans le fichier, il y a deux colonnes de valeurs séparées par une tabulation
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
|
ifstream specfile;
string temp;
int lines=0;
int i;
specfile.open("Spectrum_User_Defined.txt");
//Comptage des lignes
while (specfile.ignore(std::numeric_limits<int>::max(), '\n'))
++lines;
SpUser=Mat_DP(0.0,lines,2); //Mat_DP est une classe appartenant
// a la librairie NRC++ (Numerical Recipes in C++) permettant de
// manipuler des matrices tres facilement
// SpUser est defini en dehors de la classe en tant qu objet de classe Mat_DP
specfile.seekg(0); //Retour au debut du fichier
for (i=0;i<lines;++i)
{
specfile >> SpUser[i][0]; cout<<SpUser[i][0];
specfile >> SpUser[i][1];
}
specfile.close(); |
Il s'avère que l'affichage des données montre que le code ne marche pas correctement.
Si je ne compte pas les lignes et que je récupére directement les donnees du fichier, il n y a pas de probleme ca marche.
Mais lorsque je fais les 2 operations de comptage de lignes et de recuperation de données, ca ne marche plus.
J ai aussi essaye de fermer le fichier et de le rouvrir afin d acceder aux donnees, ca ne marche pas.
Par contre, lorsque j'utilise un autre objet de la classe fstream pour ouvrir le meme fichier et recuperer les données, le code marche.
Mais ca ferait 2 objets de classe fstream pour 1 seul fichier, et ca ne me plait pas.
En essayant avec la methode seekg, je me suis dit que l'on retournerait au debut du fichier, et que ca marcherait, mais non.
Je fais appel a vous pour m'aider, et je vous remercie d'avance :D
Re: Retour en début de fichier
Citation:
Envoyé par soda_o_rat
Dans ces lignes de code, je voudrais simplement récupérer le nombre de lignes du fichier "Spectrum_User_Defined.txt", puis ensuite récupérer les données dans une matrice qui aura pour nombre de lignes égal au nombre de lignes du fichier.
Il est aussi possible d'ajouter les lignes unes à unes dans une matrice de taile variable. Il y aura peut-être un surcoût dû à des réallocations (mais comparé au surcoût de lire 2 fois le fichier, lequel est le plus gros ?). Ce surcoût peut être grandement réduit en faisant une grossière devinette pour la taille globale de la matrice (par exemple à partir de la taille globale du fichier).
Citation:
Envoyé par soda_o_rat
Mais lorsque je fais les 2 operations de comptage de lignes et de recuperation de données, ca ne marche plus.
Si tu as essayé de lire au delà de la fin du fichier (ce qui est le cas), il est en mode d'erreur, et toutes les opérations sont des no-op. clear permet de dévalider le mode d'erreur.
Citation:
Envoyé par soda_o_rat
J ai aussi essaye de fermer le fichier et de le rouvrir afin d acceder aux donnees, ca ne marche pas.
Idem, je crois, le clear n'est pas appelé par un simple close/open (à valider).
Citation:
Envoyé par soda_o_rat
Par contre, lorsque j'utilise un autre objet de la classe fstream pour ouvrir le meme fichier et recuperer les données, le code marche.
Ce qui semble conforter mon hypothèse.