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 :

Lire fichier .csv MFC


Sujet :

C++

  1. #1
    Futur Membre du Club
    Inscrit en
    Juillet 2010
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 16
    Points : 6
    Points
    6
    Par défaut Lire fichier .csv MFC
    Bonjour, je fais appel à vous, car vous êtes professionnels, et moi non...
    Donc voilà j'ai un fichier .csv avec plusieurs colonnes et plusieurs ligne. (logique)
    Je travaille sur un projet qui viendra lire dans ce mapping.
    J'aimerais savoir comment se deplacer dans ce mapping, changer de ligne, et de colonne...
    Merci de votre aide.

    PS: j'ai déjà pas mal cherché.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    La caractéristique d'un fichier CSV est d'avoir des lignes, mais pas de colonnes.

  3. #3
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 360
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 360
    Points : 20 378
    Points
    20 378
    Par défaut
    Citation Envoyé par Golbut Voir le message
    Je travaille sur un projet qui viendra lire dans ce mapping.
    J'aimerais savoir comment se deplacer dans ce mapping, changer de ligne, et de colonne...
    Il faut d'abord
    -lire le fichier et le décortiquer ( on appelle cela "parser" en anglais )
    -puis charger les informations dans un conteneur comme CMapString,CArray etc....
    Pour le lire et l'analyser un simple fopen/fread ou un CFile suffit
    Sinon tu peux passer par un objet Excel avec Automation mais c'est bien plus complexe.
    Pour analyser il y a peut-être des méthodes COM/Automation pour exploiter ton fichier .csv


    regarder ici
    http://www.codeproject.com/KB/office...-%20MS%20Excel

  4. #4
    Invité
    Invité(e)
    Par défaut
    Pour lire un fichier non formaté mais organisé en lignes, la fonction fgets() semble toute indiquée. Ensuite, suivant les cas, soit on fait une recherche de séparateur, souvent le ';', soit on utilise sscanf(). Ces deux méthodes ne sont d'ailleurs pas exclusives.

  5. #5
    Futur Membre du Club
    Inscrit en
    Juillet 2010
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 16
    Points : 6
    Points
    6
    Par défaut
    Donc moi j'ai mon fichier, qui comporte ces informations par ligne :
    Octet - Variable - Affichage - Active

    Donc j'arrive à aller chercher affichage, mais pas les lignes correspondante, par exemple j'aimerais pourvoir faire : colonne affichage (numero 2), ligne 4
    Possible ?

    Methode pour parser un fichier ?

    C'est un fichier avec séparateur ";"

  6. #6
    Invité
    Invité(e)
    Par défaut
    "Parser" est un mot que je ne connais pas.
    La lecture d'un fichier au format CMS n'est même pas un cas d'école, c'est une opération élémentaire.

  7. #7
    Futur Membre du Club
    Inscrit en
    Juillet 2010
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 16
    Points : 6
    Points
    6
    Par défaut
    Mais moi j'ai un fichier CSV pas CMS

  8. #8
    Expert confirmé Avatar de fregolo52
    Homme Profil pro
    Développeur C
    Inscrit en
    Août 2004
    Messages
    2 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Août 2004
    Messages : 2 364
    Points : 5 378
    Points
    5 378
    Par défaut
    Peux-tu nous donner un 'vrai' exemple de contenu de fichier (avec 3-4 lignes) ? ca sera plus clair pour nous.

    CSV : Comma-separated values
    Donc, le caractère séparateur est la virgule. Mais bon, le point-virgule existe aussi.

    Ma version d'excel ne reconnais pas le ';', il m'affiche tout dans 1 colonne, alors qu'avec la virgule, ca marche bien.

  9. #9
    Futur Membre du Club
    Inscrit en
    Juillet 2010
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 16
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par fregolo52 Voir le message
    Peux-tu nous donner un 'vrai' exemple de contenu de fichier (avec 3-4 lignes) ? ca sera plus clair pour nous.

    CSV : Comma-separated values
    Donc, le caractère séparateur est la virgule. Mais bon, le point-virgule existe aussi.

    Ma version d'excel ne reconnais pas le ';', il m'affiche tout dans 1 colonne, alors qu'avec la virgule, ca marche bien.
    Images attachées Images attachées  

  10. #10
    Membre émérite
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Points : 2 799
    Points
    2 799
    Par défaut
    Je crois que l'idée, c'était de poster le fichier ouvert avec un éditeur de texte, pas dans excel .

    Sinon, mal lire un fichier csv, c'est trivial, mais sinon, il y a des subtilités à respecter (notamment si le csv peut contenir des sauts de ligne).

  11. #11
    Futur Membre du Club
    Inscrit en
    Juillet 2010
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 16
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par white_tentacle Voir le message
    Je crois que l'idée, c'était de poster le fichier ouvert avec un éditeur de texte, pas dans excel .

    Sinon, mal lire un fichier csv, c'est trivial, mais sinon, il y a des subtilités à respecter (notamment si le csv peut contenir des sauts de ligne).
    Autant pour moi :
    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
    Octet;Type;Variable;Affichage;Active
    ;;;;
    0;A16;GEN_0;Type carter;x
    1;;GEN_1;;x
    2;;GEN_2;;x
    3;;GEN_3;;x
    4;;GEN_4;;x
    5;;GEN_5;;x
    6;;GEN_6;;x
    7;;GEN_7;;x
    8;;GEN_8;;x
    9;;GEN_9;;x
    10;;GEN_10;;x
    11;;GEN_11;;x
    12;;GEN_12;;x
    13;;GEN_13;;x
    14;;GEN_14;;x
    15;;GEN_15;;x
    16;A2;GEN_16;Variante du type;x
    17;;GEN_17;;x
    18;D16;GEN_18;Numéro du type;x
    19;;GEN_19;;x
    20;D8;GEN_20;Numéro brut;x
    21;A1;GEN_21;;x
    22;A1;GEN_22;Code PIE 1;x
    23;A1;GEN_23;Code PIE 2;x
    24;A1;GEN_24;Code PIE 3;x
    25;A1;GEN_25;Code PIE 4;x
    26;A1;GEN_26;Code PIE 5;x
    27;A1;GEN_27;;
    28;D16;GEN_28;Dernière OP travaillée;x
    29;;GEN_29;;x
    30;X16;GEN_30;Carton Rouge;x

  12. #12
    Membre émérite
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Points : 2 799
    Points
    2 799
    Par défaut
    Bon, et maintenant, décris nous précisément le problème ? Qu'est-ce que tu n'arrives pas à faire ? As-tu regardé les liens qui t'ont été donnés ?

    Parce que vu le format de ton fichier, le lire sera très simple.

  13. #13
    Futur Membre du Club
    Inscrit en
    Juillet 2010
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 16
    Points : 6
    Points
    6
    Par défaut
    Donc moi je n'arrive pas à changer de ligne.
    Ce que je veux, c'est me fier à variable, comme un indice dans une BDD, et recuperer tous les champs correspondants.
    Mais je me casse la tête avec l'algo, et j'arrive pas à controler l'endroit où je veux lire.
    Besoin de plus d'infos ? (oui j'ai regardé le lien, mais sans succès, et j'ai fait des recherches sur "parser" mais il n'y a pas ce que je veux"

  14. #14
    Invité
    Invité(e)
    Par défaut
    Bonjour Golbut,
    D'abord, pardon pour le lapsus, je voulais naturellement parler de fichier CSV.
    Je pense que la question posée par White_tentacle est "qu'est-ce que vous voulez faire".
    Il n'y a pas d'algorithme là-dedans.
    "Changer de ligne" pourquoi pas?, mais pourquoi changer de ligne?
    Comme chose que vous pourriez vouloir faire, ce pourrait être par exemple "compter les lignes où la quatrième position n'est pas vide".

  15. #15
    Futur Membre du Club
    Inscrit en
    Juillet 2010
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 16
    Points : 6
    Points
    6
    Par défaut
    En fait, ce mapping est lié à une puce RFID.
    Dans cette puce on stock des infos.
    Ce que je dois faire, un programme en c++ qui affiche des boites de dialogues (environnement pocket PC 2005). Dans une des boites de dialogue, je dois afficher les données de la colonne "Affichage" et les valeurs lues dans la puces.
    Le champ variable lui est associé à une zone mémoire. En gros : si l'utilisateur demande à afficher les données de la zone générale, je dois me fier à la colonne "Variable" et n'afficher que les "Affichage" et les données correspondant aux variable commençant par "GEN_XX" (où x est un nombre).

    Autre exemple, je dois afficher les donnée de la zone OP_200, je dois chercher dans le mapping, les champs "Affichage" de l'op200. Donc je serais d'avis à chercher dans le fichier .csv, dans la colonne variable, "OP200_XX" et tant que la "Variable" s'appelle "OP200_XX", je recupère octets, "affichage"

    Plus d'infos ?

  16. #16
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 156
    Points
    3 156
    Par défaut
    Salut

    Ce qui n'est pas clair, c'est où tu coinces ? Pour lire le fichier ligne par ligne, il y a un exemple tout cuit dans la doc de la lib standard, ici, version C++ avec getline, (car fgets, c'est du C). En t'inspirant de ça et de la doc des autres méthodes, tu devrais pouvoir t'en sortir.

    Sur le plan algorithmique, vu que tes requêtes ont l'air simple, il suffit de lire ligne par ligne et de garder l'info contenue par la ligne si elle correspond au critère.
    Find me on github

  17. #17
    Futur Membre du Club
    Inscrit en
    Juillet 2010
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 16
    Points : 6
    Points
    6
    Par défaut
    Bah, je crois pas être capable de faire ça... Je vais voir avec ce que tu m'as donné. Je vous tiens au courant

  18. #18
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Citation Envoyé par white_tentacle Voir le message
    Sinon, mal lire un fichier csv, c'est trivial
    J'aurais plutôt dis : "lire un fichier CSV respectant certaines contraintes (comme l'absence de saut de ligne dans les données) est triviale".

    Car bien souvent si les cas les plus complexes sont ignorés c'est tout simplement parce que l'on écrit des parser spécifiques à un type de fichier bien défini qui n'accepte pas forcément les cas les plus tordus (qui sont alors traité comme des erreurs de fichier).

    Ce qui est par contre extrêmement complexe c'est d'écrire un parser CSV générique.

  19. #19
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    J'ai un peu de mal à imaginer un CSV sans saut de ligne, suivant le principe que le rang du champ est donné par son numéro d'ordre dans la ligne en cours, c'est à dire par rapport au saut de ligne juste précédent.
    Fichier CSV générique : quelles seraient les hypothèses?

  20. #20
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Citation Envoyé par Pierre Dolez Voir le message
    Bonjour,
    J'ai un peu de mal à imaginer un CSV sans saut de ligne, suivant le principe que le rang du champ est donné par son numéro d'ordre dans la ligne en cours, c'est à dire par rapport au saut de ligne juste précédent.
    Fichier CSV générique : quelles seraient les hypothèses?
    Je n'ai pas dit sans saut de ligne, j'ai dit sans saut de ligne dans les données.
    Pour être plus précis, il est possible dans un CSV de placer un champ entre " et d'utiliser à l'intérieur de celui des sauts de lignes, ces sauts de lignes n'indiquent pas un changement d'enregistrement mais font bel et bien parti de la donnée. Ainsi le fichier:

    A1;B1;C1
    A2;"B
    2";C2
    Défini bien deux enregistrements contenant chacun trois champs. Le second champ du second enregistrement valant "B\n2".
    Le même genre de chose existe pour avoir un séparateur dans un champ.

    Ce genre de construction est bien souvent ignoré par les parser. Tout particulièrement lorsqu'ils sont développés pour répondre à un besoin spécifique pour lequel il n'y a pas de sens à avoir de saut de ligne ou de séparateur à l'intérieur d'une donnée.

    Si par contre le parser se veut générique, il faut bien qu'il soit capable de gérer ces cas de figure.

Discussions similaires

  1. Lire fichier CSV et créer images
    Par jcaspar dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 0
    Dernier message: 14/04/2010, 17h31
  2. lire fichier csv
    Par oudghouti dans le forum VB.NET
    Réponses: 12
    Dernier message: 20/01/2010, 15h40
  3. Lire fichier CSV avec tabulation comme séparation
    Par theNoob dans le forum Langage
    Réponses: 3
    Dernier message: 07/09/2009, 18h52
  4. lire fichier csv
    Par nico0812 dans le forum C#
    Réponses: 4
    Dernier message: 17/04/2007, 18h40
  5. lire fichier csv et en extraire des infos
    Par isaglada dans le forum VBScript
    Réponses: 2
    Dernier message: 12/02/2007, 13h04

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