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 :

Affichage de données dans une ListCtrl


Sujet :

MFC

  1. #21
    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
    pointeur = strtok (NULL, separateur);    // Je pense que cette instruction est juste la pour dire qu'on se trouve à la fin du fichier!! 
    l'instruction est bonne mais mal placée, car tu n'as pas compris ce qu'elle fait : elle permet de récupérer la valeur suivante (car tu n'as pas respécifié de nouvelle chaîne) => à ne surtout pas faire en 1er sinon tu rates la 1ere valeur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if(pointeur != NULL) // Si on est pas à la fin du fichier alors on incrémente i. Le if est inutile à mon avis
            {
                i++;            // Passage à la colonne suivante
                                // Je pense que c'est à cet endroit qu'il faut stocker les valeurs!!
            }
    test inutile (comme tu le supposé) car c'est déjà la condition de ton while, de plus si tu incrémentes i avant de faire tes actions sur la valeur comment faire pour placer la 1ere valeur (i=0) ? (même incohérence que plus haut)

    Les autres changements sont ok.


    Pour résumer tu as :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
        char *string = strFileBA.GetBuffer(100); 
        char *pointeur = NULL;
        char separateur[] = ";";
        int i = 0;
     
        pointeur = strtok(string, separateur); 
     
        while (pointeur != NULL)               
        {
            // faire ce que tu as à faire avec le contenu pointé de pointeur 
            pointeur = strtok (NULL, separateur);    
            i++;
        }
    je n'ai pas tenté de compiler donc il peut y avoir des erreurs de syntaxe, mais la logique est bonne.

    A noter qu'avec la boucle while tu as supposé que les 9 valeurs étaient de même type. Est-ce réellement le cas ?

  2. #22
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 35
    Par défaut
    OK merci bon je crois que je commence enfin à assimiler le fonctionnement.
    Effectivement toutes les valeurs de mon fichier sont identiques (ce sont tous des double). Il n'y a donc pas de soucis à ce faire pour le while. Pas d'erreur de syntaxe le compilateur ne dit rien.

    Donc maintenant si j'ai bien compris il me reste dans la boucle while à envoyer les valeurs pointées dans la listctrl!!

  3. #23
    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
    Donc maintenant si j'ai bien compris il me reste dans la boucle while à envoyer les valeurs pointées dans la listctrl!!


    Ensuite tu fais une fonction avec tout ça. Puis dans ta procédure de lecture du fichier tu appelleras cette fonction pour chaque ligne lue.
    Tu commences à voir le bout du tunnel ?

  4. #24
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 35
    Par défaut
    OK et ben pour une fois que je me suis pas trompé. Ca fait plaisir.
    Bref, je pense que cela ne vas pas durer, pour envoyé les valeurs pointées la listctrl, je voudrais utiliser la méthode Format puis insertItem et setItemText, mais le soucis est que la méthode Format n'accepte un char* à sa gauche
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    pointeur.Format("%1.lf",freq);
    		m_list_carac_boite_antenne.InsertItem(m_list_carac_boite_antenne.GetItemCount(),pointeur);
    		pointeur.Format("%1.4lf",imped1);
    		m_list_carac_boite_antenne.SetItemText(m_list_carac_boite_antenne.GetItemCount() - 1,1,pointeur);
    Ceci ne fonctionne pas.
    Du coup je pense que ce n'est pas la bonne méthode à utiliser mais d'après les tutoriaux que j'ai vu c'est comme ca qu'il faut faire.

  5. #25
    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
    mais le soucis est que la méthode Format n'accepte un char* à sa gauche
    tout est dit, de plus même si ça marchait tu aurais juste réussi à effacer le contenu de ta variable pour y mettre la valeur freq (?!? dois-je tout reprendre à zéro encore une fois ou quoi ?!?)

    Je ne peux que t'inviter (encore) à réfléchir à ce que tu fais avant de le faire ou d'essayer de la faire. Je serai dispo pour répondre à tes questions quand elles concerneront autre chose que le principe même des tes algo, car ça n'a rien a voir avec les MFC ou le C++

  6. #26
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 35
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    bool CChargementBoiteAntenneEtAntenneDlg::loadBA(CString strFileBA)
    {
    	bool b_result = TRUE;
     
    	char *string = strFileBA.GetBuffer(100); 
        char *pointeur = NULL;
        char separateur[] = ";";
        int i = 0;
     
    	double freq = 0,imped1 = 0;
    	CStdioFile file;
     
    	if(!file.Open((LPCTSTR)strFileBA,CFile::modeRead))
    	{
    		AfxMessageBox("impossible d'ouvrir le fichier "+strFileBA);
    		return false;
    	}
     
    	else 
    	{
        pointeur = strtok(string, separateur); 
     
        while (pointeur != NULL)               
        {	
    		CString temp = pointeur;		// Je récupére les données pointées dans un string
    		// Ici j'utilise les méthodes InsertItem et SetItemText pour envoyer 
    		// les données pointées (c'est à dire la variable temp) vers la listctrl..
            pointeur = strtok (NULL, separateur);  	
            i++;   
        }
    	}
    	return b_result;
    }
    Voici ce que je pense qu'il faut faire...
    Est-ce une bonne idée, ou alors est-ce que cette idée est complétement fausse?
    Suis-je sur la bonne voie?

  7. #27
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 35
    Par défaut
    Bon voilà pour compléter le message précédent, j'ai essayé de tapper de code suivant :
    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
     
    bool CChargementBoiteAntenneEtAntenneDlg::loadBA(CString strFileBA)
    {
    	bool b_result = TRUE;
     
    	char *string = strFileBA.GetBuffer(100); 
        char *pointeur = NULL;
        char separateur[] = ";";
        int i = 0;
     
    	CStdioFile file;
    	if(!file.Open((LPCTSTR)strFileBA,CFile::modeRead))
    	{
    		AfxMessageBox("impossible d'ouvrir le fichier "+strFileBA);
    		return false;
    	}
     
    	else 
    	{
     
        pointeur = strtok(string, separateur); 
     
        while (pointeur != NULL)               
        {	
    		CString temp = pointeur;
    		for (i=0; i<temp; i++)
    		{
    		CString temp = pointeur;	
     
    		temp.Format("%1.lf", i);
    		m_list_carac_boite_antenne.InsertItem(m_list_carac_boite_antenne.GetItemCount(),temp);
     
    		for (int j=1;j<m_list_carac_boite_antenne.GetHeaderCtrl()->GetItemCount();j++)
    		{
    		temp.Format("%1.4lf", i,j);
    		m_list_carac_boite_antenne.SetItemText(i,j,temp);
    		}
    		}
            pointeur = strtok (NULL, separateur);  	
            i++;   
        }
    	}
    	return b_result;
    }
    Cependant lorsque je l'execute je n'obtiens que des 0. Cela viens certainement de la méthode Format qui formate mes variables, mais si je l'enlève j'obtiens la direction du fichier que je charge sur chaque ligne de chaque colonne de la listctrl.
    Quelqu'un pourrait-il m'aider?
    Merci

  8. #28
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 35
    Par défaut
    Et bien je remercie tout le monde pour l'aide que l'on m'as apporté, mais j'ai réussi à résoudre mon problème en utilisant la première méthode que j'avais utilisé.

    Voici la solution que j'ai trouvé si d'autres sont dans le même cas que moi :
    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
    57
    58
    59
    60
     
    bool CChargementBoiteAntenneEtAntenneDlg::loadBA(CString strFileBA)
    {
    	bool b_result = true;
    	char format[100];
    	CString str,str_tmp;
    	char delim = ';';
    	int i;
     
    	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);
    	}
     
    	i=sprintf(format,"%s%c%s%c%s%c%s%c%s%c%s%c%s%c%s%c%s","%lf",delim,"%lf",delim,"%lf",delim,"%lf",delim,"%lf",delim,"%lf",delim,"%lf",delim,"%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))
    			{
    				str_tmp.Format("%1.lf",freq);
    				m_list_carac_boite_antenne.InsertItem(m_list_carac_boite_antenne.GetItemCount(),str_tmp);
    				str_tmp.Format("%1.5lf",imped1);
    				m_list_carac_boite_antenne.SetItemText(m_list_carac_boite_antenne.GetItemCount() - 1,1,str_tmp);
    				str_tmp.Format("%1.4lf",adapt1);
    				m_list_carac_boite_antenne.SetItemText(m_list_carac_boite_antenne.GetItemCount() - 1,2,str_tmp);
    				str_tmp.Format("%1.5lf",imped2);
    				m_list_carac_boite_antenne.SetItemText(m_list_carac_boite_antenne.GetItemCount() - 1,3,str_tmp);
    				str_tmp.Format("%1.4lf",adapt2);
    				m_list_carac_boite_antenne.SetItemText(m_list_carac_boite_antenne.GetItemCount() - 1,4,str_tmp);
    				str_tmp.Format("%1.5lf",imped3);
    				m_list_carac_boite_antenne.SetItemText(m_list_carac_boite_antenne.GetItemCount() - 1,5,str_tmp);
    				str_tmp.Format("%1.4lf",adapt3);
    				m_list_carac_boite_antenne.SetItemText(m_list_carac_boite_antenne.GetItemCount() - 1,6,str_tmp);
    				str_tmp.Format("%1.5lf",imped4);
    				m_list_carac_boite_antenne.SetItemText(m_list_carac_boite_antenne.GetItemCount() - 1,7,str_tmp);
    				str_tmp.Format("%1.4lf",adapt4);
    				m_list_carac_boite_antenne.SetItemText(m_list_carac_boite_antenne.GetItemCount() - 1,8,str_tmp);
    			}
    		}
    		file.Close();
    	}
    		return b_result;
    }
    Merci à tous et j'espére pouvoir compter sur votre aide si jamais j'ai de nouveau besoin de vous...

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. affichage des donnes dans une datagridview
    Par daloul dans le forum VB.NET
    Réponses: 1
    Dernier message: 25/04/2008, 08h04
  2. Réponses: 3
    Dernier message: 11/10/2007, 12h18
  3. limite de l'affichage des donnés dans une Bdgrid
    Par helmis dans le forum Bases de données
    Réponses: 3
    Dernier message: 19/07/2006, 09h15
  4. affichage de données dans une zone de texte
    Par Lamie dans le forum Access
    Réponses: 2
    Dernier message: 06/07/2006, 15h31
  5. Affichage de donnée dans une page
    Par leloup84 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 8
    Dernier message: 21/02/2006, 17h54

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