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 :

lecture d'un fichier


Sujet :

MFC

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    35
    D�tails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 35
    Par d�faut lecture d'un fichier
    Est-ce que quelqu'un pourrait me dire comment faire pour lire un fichier format csv de la forme :
    3.0255;-6.014;8.4563;-15.2369;4.02987
    5.256;5.1039;-4.9874;-6.01247;5.032

    En gros je voudrais r�cup�rer ces valeurs (� savoir qu'il y a 9 colonnes s�par� par des points virgule et un nombre important de ligne (environ 200 ou 300)) pour les afficher dans une ListCtrl de ma boite de dialogue.
    Le nombre de ligne ne pose pas probl�me. Pour le moment je n'arrive � lire que les deux premi�res colonnes.

    En attendant vos r�ponses.
    Merci

    N.B : je suis un novice en c++

  2. #2
    Membre �prouv�
    Avatar de TheGzD
    Homme Profil pro
    Ing�nieur/ Docteur en Informatique
    Inscrit en
    Avril 2007
    Messages
    1 327
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, Puy de D�me (Auvergne)

    Informations professionnelles :
    Activit� : Ing�nieur/ Docteur en Informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 327
    Par d�faut
    http://msdn.microsoft.com/en-us/library/k4ftfkd2.aspx
    pour d�couper une ligne apr�s l'avoir stock�e dans un CString

  3. #3
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    35
    D�tails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 35
    Par d�faut
    Et bien en fait si tu veut j'ai d�j� un bout de code, mais je ne comprends pas pourquoi je ne r�cup�re que les 2 premi�res colonnes de mon fichier.
    Pour info le code :
    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
    56
     
    	bool b_result = true;
    	char format[9];
    	CString str,str_tmp;
    	char delim = ';';
     
    	double freq,imped1,adapt1;
    	double imped2,adapt2;
    	double imped3,adapt3;
    	double imped4,adapt4;
     
    	m_list_carac_boite_antenne.DeleteAllItems();
     
    	CWinApp * theApp = AfxGetApp();
    	if(theApp)
    	{
      		str_tmp = theApp->GetProfileString("CSV_DELIMITERS","DELIM",";");
    		delim = str_tmp.GetAt(0);
    	}
     
    	sprintf(format,"%s%c%s","%lf",delim,"%lf");
    	CStdioFile file;
    	if(!file.Open((LPCTSTR)strFileBA,CFile::modeRead))
    	{
    		AfxMessageBox("impossible d'ouvrir le fichier "+strFileBA);
    		return false;
    	}
    	else
    	{
    		while(file.ReadString(str))
    		{  		
    			if (sscanf((LPCTSTR)str,format,&freq,&imped1,&adapt1,&imped2,&adapt2,&imped3,&adapt3,&imped4,&adapt4) == 2 )
    			{
    				str_tmp.Format("%1.lf",freq);
    				m_list_carac_boite_antenne.InsertItem(m_list_carac_boite_antenne.GetItemCount(),str_tmp);
    				str_tmp.Format("%1.4lf",imped1);
    				m_list_carac_boite_antenne.SetItemText(m_list_carac_boite_antenne.GetItemCount() - 1,1,str_tmp);
    				str_tmp.Format("%1.3lf",adapt1);
    				m_list_carac_boite_antenne.SetItemText(m_list_carac_boite_antenne.GetItemCount() - 1,2,str_tmp);
    				str_tmp.Format("%1.4lf",imped2);
    				m_list_carac_boite_antenne.SetItemText(m_list_carac_boite_antenne.GetItemCount() - 1,3,str_tmp);
    				str_tmp.Format("%1.3lf",adapt2);
    				m_list_carac_boite_antenne.SetItemText(m_list_carac_boite_antenne.GetItemCount() - 1,4,str_tmp);
    				str_tmp.Format("%1.4lf",imped3);
    				m_list_carac_boite_antenne.SetItemText(m_list_carac_boite_antenne.GetItemCount() - 1,5,str_tmp);
    				str_tmp.Format("%1.3lf",adapt3);
    				m_list_carac_boite_antenne.SetItemText(m_list_carac_boite_antenne.GetItemCount() - 1,6,str_tmp);
    				str_tmp.Format("%1.4lf",imped4);
    				m_list_carac_boite_antenne.SetItemText(m_list_carac_boite_antenne.GetItemCount() - 1,7,str_tmp);
    				str_tmp.Format("%1.3lf",adapt4);
    				m_list_carac_boite_antenne.SetItemText(m_list_carac_boite_antenne.GetItemCount() - 1,8,str_tmp);
    			}
    		}
    		file.Close();
    	}
    		return b_result
    Voil� si jamais quelqu'un a peut me dire d'o� vient mon probl�me.
    Merci

  4. #4
    Membre �prouv�
    Avatar de TheGzD
    Homme Profil pro
    Ing�nieur/ Docteur en Informatique
    Inscrit en
    Avril 2007
    Messages
    1 327
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, Puy de D�me (Auvergne)

    Informations professionnelles :
    Activit� : Ing�nieur/ Docteur en Informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 327
    Par d�faut
    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
    if (sscanf((LPCTSTR)str,format,&freq,&imped1,&adapt1,&imped2,&adapt2,&imped3,&adapt3,&imped4,&adapt4) == 2 )
                {
                    str_tmp.Format("%1.lf",freq);
                    m_list_carac_boite_antenne.InsertItem(m_list_carac_boite_antenne.GetItemCount(),str_tmp);
                    str_tmp.Format("%1.4lf",imped1);
                    m_list_carac_boite_antenne.SetItemText(m_list_carac_boite_antenne.GetItemCount() - 1,1,str_tmp);
                    str_tmp.Format("%1.3lf",adapt1);
                    m_list_carac_boite_antenne.SetItemText(m_list_carac_boite_antenne.GetItemCount() - 1,2,str_tmp);
                    str_tmp.Format("%1.4lf",imped2);
                    m_list_carac_boite_antenne.SetItemText(m_list_carac_boite_antenne.GetItemCount() - 1,3,str_tmp);
                    str_tmp.Format("%1.3lf",adapt2);
                    m_list_carac_boite_antenne.SetItemText(m_list_carac_boite_antenne.GetItemCount() - 1,4,str_tmp);
                    str_tmp.Format("%1.4lf",imped3);
                    m_list_carac_boite_antenne.SetItemText(m_list_carac_boite_antenne.GetItemCount() - 1,5,str_tmp);
                    str_tmp.Format("%1.3lf",adapt3);
                    m_list_carac_boite_antenne.SetItemText(m_list_carac_boite_antenne.GetItemCount() - 1,6,str_tmp);
                    str_tmp.Format("%1.4lf",imped4);
                    m_list_carac_boite_antenne.SetItemText(m_list_carac_boite_antenne.GetItemCount() - 1,7,str_tmp);
                    str_tmp.Format("%1.3lf",adapt4);
                    m_list_carac_boite_antenne.SetItemText(m_list_carac_boite_antenne.GetItemCount() - 1,8,str_tmp);
                }
    je ne peux que t'inviter � remplacer cette horreur par quelques Tokenize (exemple en bas du lien que je t'ai mis plus haut)

    EDIT : apr�s v�rification de ce que tu as fait je r�it�rer encore => oublie tes printf et scanf (surtout que ta variable format ne semble pas permettre la d�coupage en 9 variables). La solution que tu essayes de mettre en place est compliqu�e, peu maintenable et surtout source d'erreur. Quand on programme en C++ on essaye d'en tirer profit et de ne pas faire tout en C

  5. #5
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    35
    D�tails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 35
    Par d�faut
    OK bon je vais essayer avec tokenize on verra le resultat!
    Merci pour ton aide en esp�rant que ce soit la bonne solution

  6. #6
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    35
    D�tails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 35
    Par d�faut
    Bon comme je t'ais dit, j'ai opt� pour la solution tokenize, seulement comme je ne connaissais pas cette fonction j'ai un peu du mal � comprendre comment l'integrer dans mon programme.L'exemple n'est pas tr�s explicite (enfin pour moi) et comme j'ai dit je suis un d�butant en c++, alors si tu as (ou quelqu'un d'autres) des infos pour m'aider un peu, cette aide serait la bienvenue.
    Merci

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Lecture d'un fichier .dbf
    Par San Soussy dans le forum Autres SGBD
    R�ponses: 8
    Dernier message: 07/07/2004, 16h30
  2. R�ponses: 6
    Dernier message: 02/09/2003, 15h12
  3. Lecture et ecriture fichier .ini
    Par despe dans le forum C
    R�ponses: 6
    Dernier message: 23/07/2003, 20h40
  4. [langage] Optimiser la lecture d'un fichier
    Par And_the_problem_is dans le forum Langage
    R�ponses: 4
    Dernier message: 05/02/2003, 08h54
  5. [langage] Optimiser la lecture d'un fichier
    Par And_the_problem_is dans le forum Langage
    R�ponses: 2
    Dernier message: 11/06/2002, 10h24

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