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

4 réponses

  1. 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
  2. Ravachol Messages postés 568 Statut Membre 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
  3. 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
  4. phil
     
    Merci infiniment les gars ca ma aidé bcp.....
    0