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

 C++ Discussion :

lecture fichier CSV


Sujet :

C++

  1. #1
    Futur Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 13
    Points : 5
    Points
    5
    Par défaut lecture fichier CSV
    Bonjour, je suis tout nouveau dans le langage orienté objet, après pas mal de lecture de cours je dois commencer un projet que je n'arrives pas à démarrer.
    Le but est de lire un fichier CSV lignes par lignes et de mettre dans un tableau à double dimensions. J'ai déjà essayé des bouts de codes pour la lecture du fichier CSV mais en vain. Si vous pouviez éclairer ma lanterne pour m'aider à commencer.
    Merci d'avance.

  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,
    Commence par faire un bout de code qui ouvre un fichier et lit les lignes. Puis présente le nous si tu as des problèmes.

  3. #3
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 626
    Points : 30 684
    Points
    30 684
    Par défaut
    Salut,

    Normalement, nous avons l'habitude de ne pas donner "directement" du code effectif, et nous demandons aux gens qui posent la question - autant que possible - de faire leur part d'effort et de nous montrer ce qu'ils ont déjà fait.

    Le fait est que, quelque part, si tu "mouille un peu la chemise" pour arriver à un résultat, tu retiendra bien mieux la logique à suivre que si on te donne la solution toute faite.

    Je souhaiterais donc que tu nous présente ce que tu as déjà fait et que tu nous précise les problèmes que tu rencontre, pour que nous puissions t'aider de manière la plus efficace possible.

    Ceci dit, quelques petits conseils peuvent te mettre sur la voie si tu n'arrive pas à démarrer:
    • utilise les flux fstream, et principalement, étant donné qu'il s'agit de lire dans le fichier, le flux std::ifstream.
    • utilise la classe "chaine de caractères" std::string de préférence à une chaine de caractères "C style" (tableau de caractères terminé par '\0') pour la lecture de la ligne
    • pour lire une ligne complète dans un fichier, il est possible d'utiliser la fonction standard std::getline(flux, chaine_receptrice)
    • Pour convertir une chaine de carractères en type primitifs (autre que char) ou dans n'importe quel type (et inversement), il est préférable d'utiliser les classes stringstream (cf cette entrée de la FAQ et suivantes)
    • Si le nombre de colonnes de chaque ligne de ton tableau à deux dimensions est identique (que tu n'a pas à faire à une matrice creuse), il est souvent préférable de travailler avec un tableau n'ayant qu'une seule dimension, dont le nombre d'éléments est lignes * colonnes, et sur lequel on accède à un élément donné en respectant la formule ligne_demandée * max_colonne + colonne_demandée
    • Plutôt que de travailler avec des tableaux "C style" (pointeur sur... + allocation et libération dynamique de la mémoire), il est fortement préférable de travailler avec la classe vector, fournie par le standard dans l'espace de noms std par inclusion du fichier d'en-tête <vector>, voire d'utiliser boost.array si la taille est définitive et connue au moment de la compilation. C'est beaucoup plus facile et sécuritaire à l'utilisation
    • De manière générale, préfère toujours la possibilité offerte par le C++ à toute possibilité issue du C, car les possibilités offertes par le C++ sont bien plus sécurisantes à l'emploi
    • veille à respecter, autant que faire se peut, le principe RAII (Ressource Aquisition is Initialisation ou, si tu préfères en français: l'acquisition des ressource est l'initialisation)

  4. #4
    Futur Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 13
    Points : 5
    Points
    5
    Par défaut
    j'ai réussis à avancer quand même, c'est vrai que c'est pas facile de se casser la tête mais après on ne fait pas que du recopiage et on comprend un peu plus.
    Maintenant, j'arrive à lire mon fichier et je veux le découper à chaque virgule pour mettre dans un tableau à 2 dimensions et là je bloque au moment de la concaténation.
    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
    BOOL bexport = TRUE;
    	int  i = 0, m = 1, n = 1, FileSize = 0;
    	int T[128][128];
    	char chaine[10];
    	char pathFile[MAX_PATH];
    	char *ligne;
    	char *pTk;
    	char errorTxt[512];
    	FILE *hFile;
     
    	//clear mémoire tableau
    	memset(*T, 0, sizeof(T));
     
    	// ouverture du fichier en lecture seul
    	sprintf(pathFile, ".\\MATFID.csv");
    	if(hFile = fopen(pathFile, "rb"))
    	{
    		// taille du fichier
    		FileSize = RetFileLength(hFile) - 1;
    		if(FileSize > 0)
    		{
    			// recup du contenu du fichier
    			ligne = new char[FileSize + 1];
    			ligne[0]='\0';
    			if(fread(ligne,1,FileSize,hFile))
    			{
    				if(ligne[0] != '\0')
    				{
    					// séparation des reqêtes
    					ligne[FileSize]='\0';
    					pTk = strtok (ligne,"\n");
    					while (pTk != NULL && bexport)
    					{
    						for(i=0; i < 127; i++)
    						{
    							if(pTk[i] != '\n')
    							{	
    								if(pTk[i] != ';')
     
    								{
    									sprintf(chaine,"%d",T[m][n]); 
    									T[m][n]=strcat(chaine,pTk[i]);
    								}
    								else
    									m++;
    							}
    							else
    							{
    								m=1;
    								n++;
    							}
    						}
    					}
    				}
    				else
    				{
    					...
    				}
    			}
    			...
    			delete ligne;
    		}
    		fclose(hFile);
    	}
    	...

  5. #5
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 626
    Points : 30 684
    Points
    30 684
    Par défaut
    Mais, ca, c'est un code C et non C++, et je constate (avec dépit) que tu n'a pris en compte aucun de mes conseils

    Allez, un deuxième essai, en t'inspirant, peut être, de la FAQ dont, principalement, cette page pour tout ce qui a trait aux accès fichiers, celle-ci pour ce qui a trait aux chaines de caractères et enfin celle-ci pour utiliser des classes qui t'éviteront d'avoir recours aux tableaux C style

  6. #6
    Futur Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 13
    Points : 5
    Points
    5
    Par défaut
    c'est pas que je n'ai pas voulu de tes conseils mais le collègue qui s'occupe du projet préfère utiliser le plus possible du C ... je ne fais juste que suivre les instructions.

  7. #7
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 626
    Points : 30 684
    Points
    30 684
    Par défaut
    Citation Envoyé par kodshadow Voir le message
    c'est pas que je n'ai pas voulu de tes conseils mais le collègue qui s'occupe du projet préfère utiliser le plus possible du C ... je ne fais juste que suivre les instructions.
    Quelle drôle d'idée...

    Tu devrais signaler à ton collègue qu'il est - décidément - très mauvais de vouloir mélanger le C et le C++...

    C'est le meilleur moyen pour en arriver à ne plus s'y retrouver dans un projet de longue haleine et/ou important

    Vous devriez donc décider une bonne fois pour toute de travailler soit en C, soit en C++ sur ce projet, et vous y tenir

    Loin de moi l'idée de dénigrer le C, mais, tu pourrais argumenter sur le fait que, finalement, le C++ permet de travailler de manière bien plus sécuritaire en ce qui concerne tout ce qui passe par la gestion de pointeurs et la gestion dynamique de la mémoire en C

    Evidemment, cela implique qu'il soit d'accord de s'initier un minimum au C++

Discussions similaires

  1. Lecture fichier CSV
    Par julianauribe dans le forum MATLAB
    Réponses: 9
    Dernier message: 10/09/2012, 14h17
  2. [MySQL] Lecture fichier CSV et enregistrement dans la base
    Par tifsa dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 26/09/2008, 12h49
  3. Lecture fichier .csv par colonne
    Par BRAUKRIS dans le forum Langage
    Réponses: 3
    Dernier message: 05/10/2007, 14h08
  4. Lecture fichier CSV
    Par Iphelias dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 14/06/2007, 21h58
  5. lecture fichier .csv
    Par wiss20000 dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 06/06/2007, 20h48

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