Lire une matrice dans un fichier texte en C++

Phil -  
 phil -
Bonjour tout le monde
j'ai besoin de l'aide SVP, j'ai une matrice de la forme suivante stockée dans un fichier texte, par ex:

1 2 3 4
5 6 7 8
9 5 8 7
4 4 4 4

alors ma question comment je peux faire pour savoir le nb de ligne et le nb d.elements deja lu.
y a t il une facon de dire while (! end of line ) comme ca je peux faire un compteur pour les lignes.

voici mon code

#include <iostream>
#include <fstream>
#include <iomanip>
#include <string>
using namespace std;

int main()
{

int val;
//string nomFichier;
//cout<<"Entrez le nom du fichier qui contient la matrice: ";
//cin>>nomFichier;

ifstream FichierMatrice ("matrice.txt",ios::in );
if(!FichierMatrice){
cerr<<"Ouverture du fichier impossible"<<endl;
exit(1);
}

while (!FichierMatrice.eof()){

FichierMatrice>>val;

cout<<val<<endl;
}
return 0;
}


Merci d'avance
A voir également:

4 réponses

Jolkdarr
 
Hello !

Tu peux wrapper l'appel de getline dans une classe si tu préfères.
Tu pourras continuer à écrire Fichier >> Ligne;

<pre class=code>

#include <iostream>
#include <sstream>
#include <fstream>
#include <iomanip>
#include <string>

using namespace std;

class ligne_matrice : public string
{
};

inline
istream& operator>>(istream& In, ligne_matrice& L)
{
return getline(In, L);
}

int main()
{
ifstream FichierMatrice("matrice.txt",ios::in);
if (!FichierMatrice)
{
cerr << "Ouverture du fichier impossible" << endl;
exit(1);
}

int val;
unsigned int Lignes = 0;
unsigned int Colonnes = 0;

// lecture de chaque ligne :
ligne_matrice Ligne;
while (FichierMatrice >> Ligne)
{
Lignes++;
Colonnes = 0;
istringstream S(Ligne, ios_base::in);

// lecture de chaque element :
while (S >> val)
{
Colonnes++;
cout << val << " ";
}

cout << endl << "Ligne " << Lignes << " contient " << Colonnes << " colonnes." << endl;
}

return 0;
}

</pre>
1
Ravachol Messages postés 566 Date d'inscription   Statut Membre Dernière intervention   120
 
Salut.
Tu peux utiliser la fonction getline().
Dans ton cas tu crée une variable : string ligne
et tu fais getline(FichierMatrice, ligne) à la place de FichierMatrice>>val;

A++

La pensée ne commence qu'avec le doute.
ROGER MARTIN DU GARD
0
Jolkdarr
 
Plus lisible :

#include <iostream>
#include <sstream>
#include <fstream>
#include <iomanip>
#include <string>

using namespace std;


class ligne_matrice : public string
{
};

inline
istream& operator>>(istream& In, ligne_matrice& L)
{
	return getline(In, L);
}


int main()
{
	ifstream FichierMatrice("matrice.txt",ios::in);
	if (!FichierMatrice)
	{
		cerr << "Ouverture du fichier impossible" << endl;
		exit(1);
	}

	int val;
	unsigned int Lignes = 0;
	unsigned int Colonnes = 0;
	
	// lecture de chaque ligne :
	ligne_matrice Ligne;
	while (FichierMatrice >> Ligne)
	{
		Lignes++;
		Colonnes = 0;
		istringstream S(Ligne, ios_base::in);
		
		// lecture de chaque element :
 		while (S >> val)
 		{
 			Colonnes++;
   			cout << val << " ";
 		}
 	
 		cout << endl << "Ligne " << Lignes << " contient " << Colonnes << " colonnes." << endl;		
	}

	return 0;
}

0
phil
 
Merci infiniment les gars ca ma aidé bcp.....
0