IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MFC Discussion :

MFC:Lecture de fichier


Sujet :

MFC

  1. #1
    Futur Membre du Club
    Inscrit en
    Avril 2004
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 10
    Points : 5
    Points
    5
    Par défaut MFC:Lecture de fichier
    Salut, je n'arrive pas à lire dans le fichier suivant:

    12
    -765 -50 -181
    -762.675 -50.957 -181.207
    -768.974 -50.960 -181.209
    -765.698 -47.353 -181.205
    -765.698 -53.706 -181.210
    -762.643 -50.518 -184.870
    -768.999 -50.524 -184.872
    -765.397 -53.677 -184.873
    -765.394 -47.376 -184.867
    -765.399 -47.367 -189.663
    -765.399 -53.670 -189.668
    -762.648 -50.311 -189.662

    ce que je voudrai, c'est afficher dans une zone de liste, par exemple
    cylindre de 12 points

    et dans une autre zone de liste les points
    points a: -765 -50 -181
    etc...

    Mon problème c'est la lecture parce que j'affiche
    cylindre de 0 points

    j'ai utilisé, ifstream(nomFichier, ios::in)
    nomFichier c'est le chemin du fichier sur le disque

    Si quelqu'un peut m'aider, ce serai cool,merci.

  2. #2
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Points : 2 757
    Points
    2 757
    Par défaut
    pour la lecture dans le fichier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    ifstream fichier;
    fichier.open(nomfichier);
    fichier >> nbPoints;
     
    //1ère solution
    for (int i=0;i<nbPoints) {
        fichier >> coordX >> coordY >> coordZ;
    }
     
    /*
    2ème solution
    while (!fichier.eof()) {
        fichier >> coordX >> coordY >> coordZ;
    }
    */
     
    fichier.close();
    pour ton histoire de liste, tu veux parler d'une CListCtrl?
    si oui, et si personne ne t'a répondu d'ici 1 heure, je devrais pouvoir te filer du code. pour l'instant je suis chez moi, mais faut que je bouge au boulot

  3. #3
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Points : 2 757
    Points
    2 757
    Par défaut Re: MFC:Lecture de fichier
    Citation Envoyé par phneutre
    j'ai utilisé, ifstream(nomFichier, ios::in)
    Remarque : Pour les classes ifstream et ofstream le mode par défaut est respectivement ios::in et ios::out, il est inutile de préciser ios::in.

  4. #4
    Futur Membre du Club
    Inscrit en
    Avril 2004
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    j'entre bien dans le fichier mais j'ai toujours
    cylindre de 0 points

  5. #5
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Points : 2 757
    Points
    2 757
    Par défaut
    tu peux me montrer le code ou me mettre un lien pour que je le télécharge?

  6. #6
    Futur Membre du Club
    Inscrit en
    Avril 2004
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    cette fonction permet la lecture des points

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    BOOL TsurfPalp::lecture(CWnd* ptMaFen, const char* nomFic)
    {
    	ifstream source; 
    	source.open(nomFic); 
     
    	if(!source) // peut se produire si l'utilisateur tape le nom d'un fichier inexistant
    	{
    		ptMaFen->MessageBox("Impossible d'ouvrir le fichier !\nVérifiez le nom du fichier.",
    			                 VERSION, MB_OK|MB_ICONEXCLAMATION);
    		return FALSE;
    	}
     
    	source >> NbPts;
     
    	if(NbPts < 1)
    	{
    		ptMaFen->MessageBox("Le nombre de points spécifié dans le fichier est nul\
                                 !\nVérifiez le fichier.",VERSION, MB_OK|MB_ICONEXCLAMATION);
    		return FALSE;
    	}
     
    	double x, y, z;
    	source >> x >> y >> z;
    	PtAppro.X(x); PtAppro.Y(y); PtAppro.Z(z);
     
    	P= new vecteur [NbPts];
    	unsigned int i=0;
    	do
    	{
    		source >> x >> y >> z;
          P[i].X(x); P[i].Y(y); P[i].Z(z);
    	}
    	while( (source.eof()!=1)&&(++i < NbPts) );
     
    	if(source.eof()==1)
    	{
    		ptMaFen->MessageBox("Le nombre de points spécifié dans\nle fichier est \
    							 trop grand ! Vérifiez le fichier.",VERSION, MB_OK|MB_ICONEXCLAMATION);
    		delete [] P;
    		return FALSE;
    	}
     
    	char finFic;
    	source>>finFic;//la fin de fichier peut etre sur la ligne suivant
    						// le dernier point.
    	if(source.eof()==0)
    	{
    		ptMaFen->MessageBox("Le nombre de points spécifié dans\nle fichier est \
    							 trop petit ! Vérifiez le fichier.",VERSION, MB_OK|MB_ICONEXCLAMATION);
    		delete [] P;
    		return FALSE;
    	}
    	return TRUE;
     
    }
    j'ai bien le fichier sur le disque , mais j'entre quand même dans le
    if(!source)

    mais si je le met en commentaire,
    source >> NbPts; me donne 0 points.

    c'est dans cette partie que j'ouvre mon fichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    27
    28
    29
    30
    31
    32
    33
    ...............
    ....................
    if(clg->DoModal() ==IDOK)
    		{
    			//m_CritereIdentification = clg->m_CritereIdentification;
    			TRACE("critere = %s\n");
     
    			// On crée un objet fichier
    			CFile fichier;  
     
    			VERIFY(fichier.Open(dlg.GetPathName(), CFile::modeRead));
    			//fichier.Open(dlg.GetPathName(), CFile::modeRead);
    			TRACE("file= %s \n",dlg.GetPathName());
     
     
    			CString nomChemin = dlg.GetPathName();
    			char* Chemin = strchr(nomChemin, 'E');
    			TRACE("nom du chemin %s\n",Chemin);
     
    			if (nomChemin)
    			{
    				char* nomFichier= strrchr(Chemin, '\\');	
    				// retourne un pointeur vers le dernier caratere anti-slasche de la chaine nomChemin
     
    				nomFichier++;
    				// On l'incremente pour qu'il pointe vers le 1er caratere du nom du fichier seul 
    				// (sans le chemin).
     
    				TRACE("nom du fichier %s\n",nomFichier);
     
    				TsurfPalp* ptSfPalp = new TsurfPalp(_typeSurf, nomFichier);
    ....................
    ....................
    vu que GetPathName retourne un CString et que je travaille avec des char, j'ai hésité à faire un strcpy, à la place de
    char* Chemin = strchr(nomChemin, 'E');

  7. #7
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Points : 2 757
    Points
    2 757
    Par défaut
    pour vérifier si ton fichier existe ou pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if((_access(nomChemin!= -1) // = si le fichier existe
    {
     
    //si j'entre là, alors mon fichier existe
     
    }
    voir la FAQ (cherche _access)

    dlg est un objet de quelle classe? si c'est un CFileDialog, tu peux simplifier la récupération du nom du fichier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CString nomFichier = dlg.GetFileName()
    à la place de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    char* nomFichier= strrchr(Chemin, '\\');
    // retourne un pointeur vers le dernier caratere anti-slasche de la chaine nomChemin 
     
    nomFichier++;
    // On l'incremente pour qu'il pointe vers le 1er caratere du nom du fichier seul
    // (sans le chemin).
    dans ton
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(clg->DoModal() == IDOK
    c'est "clg" ou "dlg" comme à la suite?

    en ce qui concerne le passage CString à char*, je ne sais pas si on peut faire un strcpy, mais on peut faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    //csILGFile est un CString
    LPCTSTR lpszILGFile(csILGFile);
    string sILGFile(lpszILGFile);
    const char * chILGFile = sILGFile.c_str();
    (un peu lourd, je te l'accorde)

    tu es sur qu'on peut faire 'if (!source) {}' :

    sinon, je ne sais pas ce qui ne va pas dans ton code. je vais tester voir.

    moi par exemple, j'ai une boite de dialogue avec un bouton qui permet l'ouvre d'une boite de dialogue standard 'ouverture d'un fichier'. je code l'évènement click sur le bouton Open comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    void CTab1::OnTab1BtnFileopen() 
    {
    	// TODO: Add your message handler code here and/or call default
     
    	CFileDialog OpenFileDlg(TRUE,
    							"*.ilg",
    							"",
    							 OFN_EXTENSIONDIFFERENT 
    							|OFN_HIDEREADONLY 
    							|OFN_NONETWORKBUTTON 
    							|OFN_OVERWRITEPROMPT,
    							"ILG Files (*.ilg)|*.ilg||",
    							this);
     
    	// Initialisation du répertoire de départ
        OpenFileDlg.m_ofn.lpstrInitialDir = ".";
     
    	// Affichage de la fenêtre Ouverture et capture le résultat
    	if (OpenFileDlg.DoModal()==IDOK)
    	{
    		// Récuparation du nom et du path du fichier sélectionné
    		CString csILGFile = OpenFileDlg.GetFileName();
    		CString csILGPath = OpenFileDlg.GetPathName();
     
    		if((_access(csILGPath,0))!=-1) //si le fichier existe
    		{
    			if((_access(csILGPath,4))!=-1) //si j'ai les droits en lecture
    			{
      				// Conversion du nom du fichier: LPCTSTR --> CString --> const char *
    				// et affectation du const char * à la variable externe chILGFile
    				LPCTSTR lpszILGFile(csILGFile);
    				string	sILGFile(lpszILGFile);
    				chILGFile = sILGFile.c_str();
     
    				// Instanciation et initialisation de la variable externe GLO
    				GLO = new so_globale();
    				GLO->initialisation();
     
    				// Lecture du fichier de donnée
    				lecture_bdd_fichier();
    ...
     
    }

  8. #8
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Points : 2 757
    Points
    2 757
    Par défaut
    tu trouveras ici le projet, l'exécutable et un fichier test

    n'utilises pas Internet Explorer, il refuse le téléchargement
    par contre Mozilla ou Netscape, c'est bon

    il y a une boite de dialogue avec un bouton Open. il ouvre le fichier si celui existe et si tu as les droits en lecture. ensuite il appelle une fonction 'lecture_fichier' qui lit les données contenus dans le fichier et les affiches sous forme de MessageBox pour vérifier qu'on récupère les infos

    j'espère que ça répondra à tes attentes

    enjoy

  9. #9
    Futur Membre du Club
    Inscrit en
    Avril 2004
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    j'ai pas reussi à telecharger avec netscape

  10. #10
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Points : 2 757
    Points
    2 757
    Par défaut
    je t'ai mis ça ici

    javé po u le temps de faire ça proprement au boulot

  11. #11
    Futur Membre du Club
    Inscrit en
    Avril 2004
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    ton code m'a aidé à voir plus clair, merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MFC]lecture d'un fichier mp3
    Par r0d dans le forum MFC
    Réponses: 6
    Dernier message: 26/01/2006, 02h55
  2. [jsp]lecture de fichier
    Par antigone dans le forum Servlets/JSP
    Réponses: 9
    Dernier message: 04/09/2003, 11h05
  3. [AS400][Intranet][PC] Lecture de "fichiers" AS400
    Par lando dans le forum Autres SGBD
    Réponses: 4
    Dernier message: 16/07/2003, 11h11
  4. Lecture de fichier
    Par Watcha dans le forum x86 16-bits
    Réponses: 13
    Dernier message: 04/03/2003, 20h43
  5. Lecture de fichiers ".WAV"...
    Par 0x4e84 dans le forum Langage
    Réponses: 2
    Dernier message: 03/09/2002, 09h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo