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
    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 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
    Points : 13 017
    Points
    13 017
    Par défaut
    Bonjour,
    Une réponse bête : ne rajouter que les lignes qui t'intéresse ?

  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
    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
    Points : 13 017
    Points
    13 017
    Par défaut
    Je ne comprend pas. Dans une CComboBox, tu n'as qu'une ligne et pas de colonne ?

  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
    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
    Points : 13 017
    Points
    13 017
    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
    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
    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
    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
    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
    Points : 13 017
    Points
    13 017
    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
    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
    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
    Points : 13 017
    Points
    13 017
    Par défaut
    Ou est la ligne où tu ajoutes les données à ton contrôle ?

  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
    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
    Points : 13 017
    Points
    13 017
    Par défaut
    Rappelles-moi le type de listeilot ?

  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
    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
    Points : 13 017
    Points
    13 017
    Par défaut
    Pourquoi 80000 alors que ta boucle est à 60000 ?

  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
    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
    Points : 13 017
    Points
    13 017
    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
    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
    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
    Points : 13 017
    Points
    13 017
    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
    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
    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