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???
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???
C'est quoi ton problème ouvrir le fichier et lire les mots clé ou bien ajouter les item dans ta combobox ?
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.
salut,
dans ton OnInitDialog de ta boite de dialogue :
c'est un exemple, à adapter ...
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); }
@+
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); }
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);
Ok en mettantj'ai bien vu mon fichier!AfxMessageBox(string);
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
Fichier au format .csvRequê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
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.
tu peux regarder su coté de sscanf
http://www.cplusplus.com/reference/c...cstdio/sscanf/
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
Tu peux aussi utiliser ma methode Tokenize de la classe CString. Doc ici.
Slt j'ai tester ton code mais ça ne fonctionne pas.
Ya t'il des erreurs dans ce que j'ai programmer?
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 }
J'ai 78 colonnes ya-t-il un raccourci pour mettre ces colonnes dans :
J'ai remplacer les point virgules par des pipes pour les séparateurs.
Code : Sélectionner tout - Visualiser dans une fenêtre à part CString string(_T("col1|col2|col3|col4")); // colonnes
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 ...
@+
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.
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.
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 }
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 CString string(_T("col1|col2|col3|col4")); // Cela veut dire qu'il y a 4 colonnes dans mon fichier .csv
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)
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); } }
c'est un code prêt à l'emploi
@+
erreur lors de la compilation, Tokenize n'est pas un membre de CString!!!
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?
tu es sous VC6 alors ?!erreur lors de la compilation, Tokenize n'est pas un membre de CString!!!
je ne comprends plus rien ....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?
Oui je suis sur VC6!
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?
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager