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 :

Extraire des donn�es d'un Fichier .csv


Sujet :

MFC

  1. #1
    Membre confirm�
    Inscrit en
    Avril 2009
    Messages
    133
    D�tails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 133
    Par d�faut Extraire des donn�es d'un Fichier .csv
    Bonjour,

    J'extrait d'un fichier .csv des donn�es que je met dans une combobox.
    J'aimerais ne pas tout afficher dans ma combobox. cad que jai par exemple dans ma colonne les donn�es ilot nantes, ilot1 nantes, ilot2 nantes, ilot paris, ilot marseille. J'aimerais afficher que les ilots de nantes ds ma combobox. et la j'affiche tous les ilots! Comment faire pour ne s�lectionn� que les lignes qui m'int�ressent?

    Merci

  2. #2
    R�dacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par d�faut
    Bonjour,
    Une r�ponse b�te : ne rajouter que les lignes qui t'int�resse ?

  3. #3
    Membre confirm�
    Inscrit en
    Avril 2009
    Messages
    133
    D�tails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 133
    Par d�faut
    Merci pour la r�ponse!!!!

    Je cherche � filtrer en plus de la colonne la ligne?? et je n'ai pas d'id�e??

  4. #4
    R�dacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par d�faut
    Je ne comprend pas. Dans une CComboBox, tu n'as qu'une ligne et pas de colonne ?

  5. #5
    Membre confirm�
    Inscrit en
    Avril 2009
    Messages
    133
    D�tails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 133
    Par d�faut
    Oui en effet!

    excuse moi je m'exprime mal!
    En fait je vais regarder dans mon fichier .csv qui lui a plusieurs colonnes et plusieurs lignes. Pour l'instant ce que je fais c'est que je compare toutes les colonnes de mon fichier .csv � ce que je veux mettre dans ma combobox et lorsque le titre de ma colonne est identique � ce que je veux mettre dans la colonne alors je met les infos dans la combobox. Le probl�me c'est que j'affiche toutes les lignes de ma colonne une fois (pour ne pas les r�p�ter)et moi j'aimerais afficher que les lignes qui m'int�resse.

  6. #6
    R�dacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par d�faut
    Je ne comprends toujours pas pourquoi tu n'ins�res pas dans ta combo que les lignes qui t'int�ressent. Montre un bout de code pour que ce soit plus clair :

  7. #7
    Membre confirm�
    Inscrit en
    Avril 2009
    Messages
    133
    D�tails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 133
    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
    // PERMET D'AFFICHER LES SITES DANS LA COMBOBOX SANS AVOIR DEUX FOIS LE MEME...
    	int w,x;
    	int res2;
    	w=1;
    	m_valueCtrlSite.InsertString(0,(CString)listesite[0]); // on insert dans la ComboBox le nom du premier site
    	for (int j=0;j<60000;j++) // pour 60000 lignes...
    	{	
     
    		x=j;				// "x" prend la valeur de "j" (c'est a dire le numero de la ligne)
    		do					//faire
    		{	
    			if (j!=0)		// si j est différent de 0 (car sinon listesite[j-1] n'existe pas -> bug)
    			{	res2 = strcmp (listesite[x-1],listesite[j]); // on compare le nom du site au précédent
    				if (res2!=0) // si les 2 noms sont différent
    				{	x--;		// on décrémente "x" de facon à comparer avec le nom du site "l-2" puis "l-3"... 
    					if (x==0)	// ...jusqu'à temps que "x" soit égale à zéro (c-à-d jusqu'à ce qu'on est remonté tout le tableau)
    					{	
    						m_valueCtrlSite.AddString(listesite[j]);
     
    					}
    				}
    				else		// sinon, si les 2 chaines sont identiques (nom du site déja rencontré)
    				{	
    					x=0;	// on met "x" à zéro de facon à sortir de la boucle
    				}
    			}
    			else 
    			{
    				x=0;		// on met "x" à zéro de facon à sortir de la boucle
    			}
    		}
    		while (x!=0); //tant que "x" est différent de zéro
     
    	}

  8. #8
    Membre confirm�
    Inscrit en
    Avril 2009
    Messages
    133
    D�tails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 133
    Par d�faut
    Voici le bout de code qui permet de lire les informations que je veux r�cup�rer dans ma colonne :

    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
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    //PERMET DE METTRE TOUS LES NOMS D'ILOTS COMMENCANT PAR "ILOT" PRESENT DANS LE FICHIER .CSV DANS UN TABLEAU "listeilot"
    void CChoixIlot::ListeIlots()
    {
     
    	FILE * fichierCsv;									// Nom du fichier qu'on va utiliser
    	char * cToken;										// Buffer du contenu des valeurs d'une ligne
    	char * cToken2;										// Buffer du contenu des valeurs d'une ligne
    	char cBuffligne[1500] = "";							// Buffer du contenu de la ligne du fichier
    	int iCompteur = 0;									// Compte le nombre de fois où on boucle
    	int colonneIlot;
    	bool d=TRUE;													// Numéros des colonnes qui nous intéressent
    	// ON RECUPERE LE NUMERO DES COLONNES QUI NOUS INTERESSENT
    	if(( fichierCsv = fopen (cheminFichier1,"r")) != NULL)
    														//Si pas de problème lors de l'ouverture du fichier
    	{
    		//if (fgets(cBuffligne,sizeof(cBuffligne),fichierCsv) != NULL)	
    		while (    (fgets(cBuffligne,sizeof(cBuffligne),fichierCsv) != NULL) && d==TRUE )//pour toute les lignes du fichier ou jusqu'a ce que "d" soit faux
    	    {
    				cToken = strtok( cBuffligne, "|\n" );		//Le délimiteur des valeurs est un pipe
    				while( cToken != "LAVAL" && d==TRUE )
    				{
     					iCompteur ++;							// lorsqu'on boucle, cela veut dire qu'on passe à la colonne suivante...
    					if((CString) cToken == "Ilôt Technicien")
    					{										// si entre deux virgules on reconnait ce String
    						colonneIlot = iCompteur;// alors on recupère ce qui correspond à son numéro de colonne
    						cToken=NULL;
     
    					}
    					if ((CString) cToken == "Date Effective")// si on rencontre la dernière colonne "Date Effective" 
    					{
    						d=FALSE;   // on met "d" a FALSE pour sortir de la boucle
    					}
    					cToken = strtok( NULL, "|\n" );			//on passe au Token suivant
    				}iCompteur=0;
     
    		}
    	}fclose(fichierCsv);
     
    	if(( fichierCsv = fopen (cheminFichier1,"r")) != NULL)
    	{	CString temp;
    		int l=0;	//Si pas de problème lors de l'ouverture du fichier
     
    		while (fgets(cBuffligne,sizeof(cBuffligne),fichierCsv) != NULL)	//Pour chaque ligne du fichier
    		{										
    			iCompteur=0;
    			cToken2 = strtok( cBuffligne, "|" );		//Le délimiteur des valeurs est un point virgule
    			while ( cToken2 != NULL )
    			{
    				iCompteur ++;							// compteur "des pipes", à chaque boucle on est passé à la colonne suivante
    				if ( iCompteur == colonneIlot )			// si on est à la colonne "ilot technicien"
    				{
     
    						int result=strcmp(cToken2," "); // on compare la valeur de la cellule a "vide"
    						if(result!=0)					//si la colonne "ilot technicien" a bien été rempli 
    						{
    							if ((CString)cToken2!="Ilôt Technicien") // si la chaine de caractère n'est pas le titre de la colonne
    							{
    								temp=(CString)cToken2; // "temp" prend pour valeur le nom de l'ilot
    								int c = temp.GetLength();// "c" prend pour valeur sa longueur
    								temp.Delete(4,c-4); // on supprime tout le nom de l'ilot à partir du 4ème caractère
    								int res1=strcmp(temp,"ILOT"); // pour pouvoir le comparer a la chaine "ILOT"
    								if (res1==0) // si le nom présent dans la colonne commence par "ILOT"
    								{	
    									listeilot[l]=cToken2; // on ajoute le nom de l'ilot au tableau "listeilot"
    									l++;//on incrémente le pointeur qui indique la ligne du tableau
    								}//else ErrIlot(cToken2); //sinon appel de la fonction ErrIlot()
    							}
    						}
     
    				}
    				cToken2 = strtok( NULL, "|" ); // on récupère l'autre Token
    			}
    		}
    	}
    	fclose (fichierCsv); // on ferme le fichier
    }
    Ici je regarde toutes les lignes de mon fichier .csv de la colone qui m'int�ressent.

    Voila un autre bout de code!!!!!!!

  9. #9
    R�dacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par d�faut
    Il y aurait beaucoup � redire sur le code (tant qu'� faire, utilises au - les C[Stdio]File, les CString etc..
    Pourquoi ne pas faire ton filtre ici :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
     
    if( (res1==0) // si le nom présent dans la colonne commence par "ILOT"
     && Ajoute ton test ici !
    )
    {	
    	listeilot[l]=cToken2; // on ajoute le nom de l'ilot au tableau "listeilot"
    	l++;//on incrémente le pointeur qui indique la ligne du tableau
    }//else ErrIlot(cToken2); //sinon appel de la fonction ErrIlot()

  10. #10
    Membre confirm�
    Inscrit en
    Avril 2009
    Messages
    133
    D�tails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 133
    Par d�faut
    en fait je met d�ja les lignes qui m'int�ressent mais j'aimerais encor plus filtrer cad: j'ai le nom des ilots de cholet et de laval dans ma combobox et moi j'aimerais afficher que par exemple les ilots de cholet!!! donc j'aimerais ne s�lectionn� que les lignes des ilots de cholet???

    Do you understand?

    Es ce que tu peut �tre plus clair dans le bout de code que tu m'a poster?
    je t'en remerci.

  11. #11
    R�dacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par d�faut
    Ou est la ligne o� tu ajoutes les donn�es � ton contr�le ?

  12. #12
    Membre confirm�
    Inscrit en
    Avril 2009
    Messages
    133
    D�tails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 133
    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
    //PERMET D'AFFICHER LES ILOTS DANS LA COMBOBOX SANS AVOIR DEUX FOIS LE MEME...	
    	int k,l;
    	int res;
    	k=1;
    	m_valueCtrlIlot.InsertString(0,(CString)listeilot[0]); // on insert dans la ComboBox le nom du premier ilot
    	for (int i=0;i<60000;i++) // pour 60000 lignes...
    	{	
     
    		l=i;				// "l" prend la valeur de "i" (c'est a dire le numero de la ligne)
    		do					//faire
    		{	
    			if (i!=0)		// si i est différent de 0 (car sinon listeilot[i-1] n'existe pas -> bug)
    			{	res = strcmp (listeilot[l-1],listeilot[i]); // on compare le nom de l'ilot au précédent
    				if (res!=0) // si les 2 noms sont différent
    				{	l--;		// on décrémente "l" de facon à comparer avec le nom d'ilot "l-2" puis "l-3"... 
    					if (l==0)	// ...jusqu'à temps que "l" soit égale à zéro (c-à-d jusqu'à ce qu'on est remonté tout le tableau)
    					{	
    						m_valueCtrlIlot.AddString(listeilot[i]);
    						//m_valueCtrlIlot.InsertString(k,(CString)listeilot[i]); // s'il n'y était pas encore, on ajoute le nom de l'ilot dans la liste de la ComboBox
    						//k++;    // on incrémente "k" qui correspond à la place du nom de l'ilot dans la liste de la ComboBox
    						}
    				}else		// sinon, si les 2 chaines sont identiques (nom d'ilot déja rencontré)
    				{	
    					l=0;	// on met "l" à zéro de facon à sortir de la boucle
    				}
    			}else l=0; 
    		}while (l!=0); //tant que "l" est différent de zéro
     
    	}	
    	m_valueCtrlIlot.SetCurSel(4);  // Met l'îlot GE-CDS par défaut au lancement de l'appli
    Ou est la ligne o� tu ajoutes les donn�es � ton contr�le ?
    voici la ligne :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    m_valueCtrlIlot.AddString(listeilot[i]);

  13. #13
    R�dacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par d�faut
    Rappelles-moi le type de listeilot ?

  14. #14
    Membre confirm�
    Inscrit en
    Avril 2009
    Messages
    133
    D�tails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 133
    Par d�faut
    Rappelles-moi le type de listeilot ?
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    CString listeilot[80000];		//tableau qui contient les noms d'îlots présents dans la colonne ILOT TECHNICIEN du fichier CSV

  15. #15
    R�dacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par d�faut
    Pourquoi 80000 alors que ta boucle est � 60000 ?

  16. #16
    Membre confirm�
    Inscrit en
    Avril 2009
    Messages
    133
    D�tails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 133
    Par d�faut
    C'est vrai!!!!
    bien vu l'aveugle je n'avais m�me pas fais attention

    Je reprend le projet d'une autre personne qui �tait la avant moi donc je pense qu'il a mis 80000 par pr�caution mais bon ca ne sert a rien!!!

  17. #17
    R�dacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par d�faut
    Et dans la m�me veine, t'as une bonne raison pour ne pas utiliser CStringArray ?
    Tu as quelle version de Visual ?

  18. #18
    Membre confirm�
    Inscrit en
    Avril 2009
    Messages
    133
    D�tails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 133
    Par d�faut
    Tu as quelle version de Visual ?
    Microsoft Visual C++ 6.0

  19. #19
    R�dacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par d�faut
    Ta liste contient au final 60000 �l�ments o� ton pr�d�cesseur �tait du genre � prendre de grosse marges de s�curit� ? En d'autre terme, dans ta combo, au final, il y a combien d'entr�es ?

  20. #20
    Membre confirm�
    Inscrit en
    Avril 2009
    Messages
    133
    D�tails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 133
    Par d�faut
    Tu veux dire combien il y a de s�lection? il ya 14 s�lection possibles.

+ R�pondre � la discussion
Cette discussion est r�solue.
Page 1 sur 3 123 Derni�reDerni�re

Discussions similaires

  1. [PEAR] Extraire des donn�es d'un fichier CSV pour en faire un PDF
    Par kleyde89 dans le forum Biblioth�ques et frameworks
    R�ponses: 2
    Dernier message: 12/05/2011, 10h16
  2. [Batch] Extraire des donn�es d'un fichier CSV
    Par soufianekh dans le forum Scripts/Batch
    R�ponses: 11
    Dernier message: 27/10/2009, 13h34
  3. Extraire des donn�es d'un fichier .csv avec C++
    Par cre31400 dans le forum C++Builder
    R�ponses: 14
    Dernier message: 08/07/2008, 10h25
  4. Extraire des donn�es dans un fichier .csv
    Par orj30754 dans le forum C
    R�ponses: 7
    Dernier message: 03/11/2006, 14h48
  5. R�ponses: 7
    Dernier message: 29/09/2005, 10h19

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