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 :

remplir une combobox à partir d'un fichier .csv


Sujet :

MFC

  1. #1
    Débutant
    Inscrit en
    Avril 2009
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 133
    Points : 50
    Points
    50
    Par défaut remplir une combobox à partir d'un fichier .csv
    Bonjour,

    J'ai besoin d'aide!!!

    Je voudrais remplir ma combobox qui se trouve dans une boite de dialog à partir d'un fichier .csv. Es ce que quelqu'un a une idée???

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    C'est quoi ton problème ouvrir le fichier et lire les mots clé ou bien ajouter les item dans ta combobox ?

  3. #3
    Débutant
    Inscrit en
    Avril 2009
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 133
    Points : 50
    Points
    50
    Par défaut
    Mon problème est que je veux ajouter des items dans ma combobox à partir de ce fichier et ensuite en fonction de l'item choisi alors on affiche les information qui là concerne.

  4. #4
    Membre confirmé Avatar de stephdim
    Profil pro
    Inscrit en
    Août 2007
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 462
    Points : 521
    Points
    521
    Par défaut
    salut,

    dans ton OnInitDialog de ta boite de dialogue :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    CComboBox *pComboBox=(CComboBox*)GetDlgItem(IDC_COMBOBOX);
     
    {
      CStdioFile file(_T("C:\\fichier.txt"),CFile::modeRead|CFile::typeText);
     
      CString string;
      while (file.ReadString(string))
        VERIFY(pComboBox->AddString(string)>=0);
    }
    c'est un exemple, à adapter ...

    @+

  5. #5
    Débutant
    Inscrit en
    Avril 2009
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 133
    Points : 50
    Points
    50
    Par défaut
    Merci pour ta solution.

    Mais ça ne fonctionne pas!!!
    Je n'ai rien qui s'affiche dans ma Combobox!!!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CComboBox *pComboBox=(CComboBox*)GetDlgItem(IDC_COMBOCHOIXDUSITE);
     
    {
      CStdioFile file(_T("D:\\Alexis\\stage indic alexis\\CODE\\Debug\\Copie de ENCOU_CCH_LVL_pipe.csv"),CFile::modeRead|CFile::typeText);
     
      CString string;
      while (file.ReadString(string))
        VERIFY(pComboBox->AddString(string)>=0);
    }

  6. #6
    Membre confirmé Avatar de stephdim
    Profil pro
    Inscrit en
    Août 2007
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 462
    Points : 521
    Points
    521
    Par défaut
    tu as une assertion en mode debug ? sur la ligne VERIFY(...) ?

    attention le fichier csv, représente normalement une matrice avec des colonnes (séparées par des tabulations) et des lignes (séparées par un retour chariot)

    dans l'exemple, je ne traite que les lignes. si tu as plusieurs colonnes il faut adapter

    as tu bien mis le code dans OnInitDialog() ?

    pour faire un essai, remplace la ligne VERIFY(...) par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    AfxMessageBox(string);
    @+

  7. #7
    Membre éclairé
    Avatar de buggen25
    Ingénieur développement logiciels
    Inscrit en
    Août 2008
    Messages
    554
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Août 2008
    Messages : 554
    Points : 709
    Points
    709
    Par défaut
    Citation Envoyé par stephdim Voir le message
    tu as une assertion en mode debug ? sur la ligne VERIFY(...) ?

    attention le fichier csv, représente normalement une matrice avec des colonnes (séparées par des tabulations) et des lignes (séparées par un retour chariot)

    dans l'exemple, je ne traite que les lignes. si tu as plusieurs colonnes il faut adapter

    as tu bien mis le code dans OnInitDialog() ?

    pour faire un essai, remplace la ligne VERIFY(...) par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    AfxMessageBox(string);
    @+
    j'ajouterai, si tu veux supprimer le contenu du combobox utilise ResetContent, sa pourrait servir

  8. #8
    Débutant
    Inscrit en
    Avril 2009
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 133
    Points : 50
    Points
    50
    Par défaut
    Ok en mettant
    AfxMessageBox(string);
    j'ai bien vu mon fichier!
    En effet, je voudrais afficher une colonne de mon fichier .csv dans ma ComboBox.

    Le fichier .csv fonctionne comme ceci : exemple :
    Ceci représente un tableau .xls
    Requête Référence Propriétaire Date Arrivée Matériel
    57101 C7587J Nantes 20/01/2007
    57102 123456 Paris 18/12/2006
    Fichier au format .xls

    Requête;Référence;Ilot technicien;Date Arrivée Matériel
    57101;C7587J;ILOT TACTIQUE;20/01/2007
    57102;123456;ILOT RESEAU;18/12/2006
    Fichier au format .csv
    Dans mon programme j'ai remplacer les ; par des |.

    Comment par exemple mettre que la colonne Proriétaire dans ma ComBoBox?
    Et en sélectionnant cette colonne j'aurais d'afficher les propriétaires.

  9. #9
    Membre éclairé
    Avatar de buggen25
    Ingénieur développement logiciels
    Inscrit en
    Août 2008
    Messages
    554
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Août 2008
    Messages : 554
    Points : 709
    Points
    709
    Par défaut
    tu peux regarder su coté de sscanf
    http://www.cplusplus.com/reference/c...cstdio/sscanf/

  10. #10
    Membre confirmé Avatar de stephdim
    Profil pro
    Inscrit en
    Août 2007
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 462
    Points : 521
    Points
    521
    Par défaut
    tu recherches la partie qui t'intéresse en comptant les délimiteurs

    exemple :

    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
     
     
    CString string(_T("col1;col2;col3;col4"));  // 4 colonnes
     
    const int col=2;  // pour extraire la colonne 3 (index 2) par exemple
     
    int n=col,i=0;
    while (n>0)
    {
      i=string.Find(_T(';'),i);
      if (i<0)
        AfxThrowUserException();    // colonne absente
     
      ++i;
      --n;
    }
     
    int j=string.Find(_T(';'),i);
    if (j<0)
      j=string.GetLength();
     
    CString value(string.Mid(i,j-i));
    // ici value contient la valeur de la colonne
    @+

  11. #11
    Rédacteur

    Inscrit en
    Novembre 2006
    Messages
    1 272
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 272
    Points : 1 672
    Points
    1 672
    Par défaut
    Tu peux aussi utiliser ma methode Tokenize de la classe CString. Doc ici.

  12. #12
    Débutant
    Inscrit en
    Avril 2009
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 133
    Points : 50
    Points
    50
    Par défaut
    Slt j'ai tester ton code mais ça ne fonctionne pas.
    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
    //TEST POUR LA COMBOBOX CHOIX DU SITE
     
    CComboBox *pComboBox=(CComboBox*)GetDlgItem(IDC_COMBOCHOIXDUSITE);
     
    {
      CStdioFile file(_T("D:\\Alexis\\stage indic alexis\\CODE\\Debug\\Copie de ENCOU_CCH_LVL_pipe.csv"),CFile::modeRead|CFile::typeText);
     
    CString string(_T("col1|col2|col3|col4"));  //  colonnes
     
    const int col=3;  // pour extraire la colonne 4 (index 2) par exemple
     
    int w=col,x=0;
    while (w>0)
    {
      x=string.Find(_T('|'),x);
      if (x<0)
        AfxThrowUserException();    // colonne absente
     
      ++x;
      --w;
    }
     
    int j=string.Find(_T('|'),x);
    if (j<0)
      j=string.GetLength();
     
    CString value(string.Mid(x,j-x));
    // ici value contient la valeur de la colonne
    }
    Ya t'il des erreurs dans ce que j'ai programmer?
    J'ai 78 colonnes ya-t-il un raccourci pour mettre ces colonnes dans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CString string(_T("col1|col2|col3|col4"));  //  colonnes
    J'ai remplacer les point virgules par des pipes pour les séparateurs.

  13. #13
    Membre confirmé Avatar de stephdim
    Profil pro
    Inscrit en
    Août 2007
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 462
    Points : 521
    Points
    521
    Par défaut
    qu'est ce qui ne fonctionne pas ?!?!

    il faut associer maintenant le chargement du CSV et l'extraction de colonne ...

    comprends-tu ce que tu écris en code ?

    le premier code que j'ai donné, extrait uniquement une ligne du fichier CSV
    le deuxieme code, extrait une colonne à partir d'une ligne

    maintenant, il faut mixer les deux codes ...

    @+

  14. #14
    Débutant
    Inscrit en
    Avril 2009
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 133
    Points : 50
    Points
    50
    Par défaut
    Ce qui ne fonctionne pas c'est qu'il n'y a rien qui s'affiche dans ma combobox.

    Ok pour le premier code il extrait bien une ligne du fichier csv.

    Je ne suis pas sur de tous comprendre dans le code je te le met avec les commentaires comme ça tu pourra me dire si je me trompe.
    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
    //TEST POUR LA COMBOBOX CHOIX DU SITE
     
    CComboBox *pComboBox=(CComboBox*)GetDlgItem(IDC_COMBOCHOIXDUSITE);
     
    {
    	CStdioFile file(_T("D:\\Alexis\\stage indic alexis\\CODE\\Debug\\Copie de ENCOU_CCH_LVL_pipe.csv"),CFile::modeRead|CFile::typeText);
     
    CString string(_T("col1|col2|col3|col4"));  //  Cela veut dire qu'il y a 4 colonnes dans mon fichier .csv
     
    const int col=2;  // pour extraire la colonne 3 (index 2) par exemple
     
    int w=col,x=0;  // déclarations des variables que l'on va utilisé ensuite
    while (w>0)		// tant que la colonne choisi (ici 2) est supérieur à 0 faire 
    {
      x=string.Find(_T('|'),x);    // on regarde s'il y a des séparateurs et ont les mêmes dans x.
      if (x<0)						// s'il n'y a pas de "|"
        AfxThrowUserException();    // colonne absente
     
      ++x;  //on incrémente x
      --w;	//on décrémente la colonne
    }
     
    int j=string.Find(_T('|'),x); // on déclare j comme étant la variable de pipe trouvé
    if (j<0)					// si il n'y a pas de pipe faire
      j=string.GetLength();		// j= le nombre d'octets dans la chaîne
     
    CString value(string.Mid(x,j-x));
    // ici value contient la valeur de la colonne
    }
    Dans mon appli je voudrais lire toutes les lignes d'une colonne de mon fichier .csv pour ensuite mettre les lignes dans ma combobox sans répéter la ligne, sans avoir plusieurs fois le même choix dans ma combobox.

  15. #15
    Membre confirmé Avatar de stephdim
    Profil pro
    Inscrit en
    Août 2007
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 462
    Points : 521
    Points
    521
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CString string(_T("col1|col2|col3|col4"));  //  Cela veut dire qu'il y a 4 colonnes dans mon fichier .csv
    non, c'est un exemple. La variable string doit être une ligne du fichier CSV


    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
     
    CComboBox *pComboBox=(CComboBox*)GetDlgItem(IDC_COMBOCHOIXDUSITE);
     
    {
      CStdioFile file(_T("D:\\Alexis\\stage indic alexis\\CODE\\Debug\\Copie de ENCOU_CCH_LVL_pipe.csv"),CFile::modeRead|CFile::typeText);
     
      CString string;
      while (file.ReadString(string))
      {
        int i=0;
     
        for (int n=2;n>0;--n)      // on évite les 2 premières colonnes
          string.Tokenize(_T("|"),i);
     
        VERIFY(pComboBox->AddString(string.Tokenize(_T("|"),i))>=0);
      }
    }
    bon j'ai fais plus simple (en tenant compte de la remarque de superjaja, le code est beaucoup plus court, mais moins rapide à l'éxecution)

    c'est un code prêt à l'emploi

    @+

  16. #16
    Débutant
    Inscrit en
    Avril 2009
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 133
    Points : 50
    Points
    50
    Par défaut
    erreur lors de la compilation, Tokenize n'est pas un membre de CString!!!

  17. #17
    Débutant
    Inscrit en
    Avril 2009
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 133
    Points : 50
    Points
    50
    Par défaut
    Problème car je n'ai que des colonnes je n'ai pas de ligne!!!! alors comment faire pour lire tte les lignes d'une colonne sans les répéter dans la combobox?

  18. #18
    Membre confirmé Avatar de stephdim
    Profil pro
    Inscrit en
    Août 2007
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 462
    Points : 521
    Points
    521
    Par défaut
    erreur lors de la compilation, Tokenize n'est pas un membre de CString!!!
    tu es sous VC6 alors ?!

    Problème car je n'ai que des colonnes je n'ai pas de ligne!!!! alors comment faire pour lire tte les lignes d'une colonne sans les répéter dans la combobox?
    je ne comprends plus rien ....

  19. #19
    Débutant
    Inscrit en
    Avril 2009
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 133
    Points : 50
    Points
    50
    Par défaut
    Oui je suis sur VC6!

  20. #20
    Débutant
    Inscrit en
    Avril 2009
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 133
    Points : 50
    Points
    50
    Par défaut
    je réexplique :

    je me trouve avec un fichier .csv.

    Dans ce fichier j'ai :

    Requête Référence Proprietaire Date Arrivée Matériel
    57101 __C7587J __PARIS_____ 20/01/2009
    57102 __123456 __NANTES___ 18/12/2008
    57103 __789456 __PARIS_____ 14/06/2008
    57104 __654528 __PARIS_____ 15/05/2008
    57105 __321654 __NANTES___ 21/02/2009

    J'ai installé sur une boîte de dialog une ComboBox. J'aimerais dans celle si affiché les Propriétaires, soit, PARIS et NANTES.
    Comment faire?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 4
    Dernier message: 28/05/2015, 16h32
  2. Remplir une combobox à partir de la 2e ligne
    Par wagui26 dans le forum Débuter
    Réponses: 10
    Dernier message: 13/10/2008, 16h49
  3. [Stratégie] Remplir une ComboBox à partir du contenu d'un JTextField
    Par une_tite_question dans le forum Composants
    Réponses: 4
    Dernier message: 01/07/2008, 14h22
  4. Réponses: 0
    Dernier message: 07/02/2008, 16h09
  5. Remplir une liste à partir d'un fichier texte
    Par leroidje dans le forum Langage
    Réponses: 1
    Dernier message: 01/07/2007, 08h41

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