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 :

extraire des lignes d'un fichier .csv avec Visual C++


Sujet :

C++

  1. #1
    Membre à l'essai
    Inscrit en
    Juillet 2008
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 44
    Points : 19
    Points
    19
    Par défaut extraire des lignes d'un fichier .csv avec Visual C++
    Bonjour,

    J'utilise visual C++, et j'aurais besoin de votre aide.
    J'ai un fichier .csv contenant environ 1000 lignes, mais seulement une trentaine sont intéressantes pour moi. il est structuré de cette manière :

    environ 1000lignes qui me servent à rien
    [espace][espace]<name>name1</name>
    quelques lignes
    [espace][espace]<coordinate>longitude1,lattitude1</coordinate>
    quelques lignes
    [espace][espace]<name>name2</name>
    quelques lignes
    [espace][espace]<coordinate>longitude2,lattitude2</coordinate>
    quelques lignes
    [espace][espace]<name>name3</name>
    quelques lignes
    [espace][espace]<coordinate>longitude3,lattitude3</coordinate>
    etc...

    J'aurai besoin d'en extraires les lignes avec les noms et coordonnées pour avoir au final quelque chose comme cela:
    [espace][espace]<name>name1</name>
    [espace][espace]<coordinate>longitude1,lattitude1</coordinate>
    [espace][espace]<name>name2</name>
    [espace][espace]<coordinate>longitude2,lattitude2</coordinate>
    [espace][espace]<name>name3</name>
    [espace][espace]<coordinate>longitude3,lattitude3</coordinate>

    Je me suis lancé sur les TStringList, mais ce n'est pas compatible avec Visual C++ . Quelqu'un aurait-il une piste svp ?? Le truc c'est d'extraire les lignes contenant <name> et <coordinate>.

    Merci infiniment !

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Du CSV, ça ?
    Ça ressemble plus à du XML...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre à l'essai
    Inscrit en
    Juillet 2008
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 44
    Points : 19
    Points
    19
    Par défaut
    ben c'est un fichier google earth (extension .kmz) que j'ouvre avec excel en .csv . Ca marcherait avec du xml?

  4. #4
    Membre confirmé Avatar de themadmax
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    446
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 446
    Points : 496
    Points
    496
    Par défaut
    CSV = Comma separated values : fichier avec comme séparation la virgule.
    http://fr.wikipedia.org/wiki/Comma-separated_values
    XML = eXtensible Markup Language
    En effet, les fichiers google earth utilise le format XML, il serai donc plus facile pour toi d'utiliser une bibliotheque de parsage de fichier XML.
    http://code.google.com/apis/kml/docu...n/kml_tut.html
    ________________________________________________
    http://bliquid.fr : Blog sur Android et l'Acer Liquid

  5. #5
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Euh...
    Si j'en crois FilExt, en plus d'être en autre chose que CSV, c'est zippé, ce truc...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    Membre à l'essai
    Inscrit en
    Juillet 2008
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 44
    Points : 19
    Points
    19
    Par défaut
    et avec le xml on peut extraire des lignes comme cela?

  7. #7
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Un parseur XML peut faire mieux que ça, une fois le fichier dézippé...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  8. #8
    Membre à l'essai
    Inscrit en
    Juillet 2008
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 44
    Points : 19
    Points
    19
    Par défaut
    et il faut un logiciel particulier? (oui l'immensité de mon incultance dépasse l'entendure...)

  9. #9
    Membre éclairé Avatar de befalimpertinent
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    561
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Avril 2007
    Messages : 561
    Points : 833
    Points
    833
    Par défaut
    Libre à toi d'utiliser la bibliothèque de ton choix.
    Personellement je te conseilles
    TinyXml
    Mais Il en existe d'autres comme Xerces, ou le parseur de Qt qui sont également très bien
    Linux > *

  10. #10
    Membre à l'essai
    Inscrit en
    Juillet 2008
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 44
    Points : 19
    Points
    19
    Par défaut
    mais c'est une programmation totalement différente que C++?

  11. #11
    Membre éclairé Avatar de befalimpertinent
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    561
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Avril 2007
    Messages : 561
    Points : 833
    Points
    833
    Par défaut
    Non. Cela reste du c++. (à vrai dire je ne vois pas ce qui te faire dire ça)

    Suffit de suivre la doc et d'essayer 2-3 exemples pour savoir sans servir.
    Linux > *

  12. #12
    Membre à l'essai
    Inscrit en
    Juillet 2008
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 44
    Points : 19
    Points
    19
    Par défaut
    ok je vais faire ça. De quelle doc me parles-tu?
    merci!

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

    Informations professionnelles :
    Activité : aucun

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

    Je crois qu'arrivé à ce point, une question s'impose:

    Que veux tu faire exactement

    Veux tu, simplement, t'amuser à récupérer les données, ou veux tu en arriver à créer une application personnelle qui te permette de ... modifier ce fichier

    Dans le premier cas, tu peux envisager de créer une application personnelle, mais, le plus facile est peut-être d'utiliser les fonctions fournies par google heart, car je serais étonné qu'il ne fournisse aucun moyen d'exporter des données

    Dans le deuxième cas, si tu n'a jamais programmé (en C++) - car j'avouerai que tes questions et réponses sont de nature à me le faire supposer - je te conseillerais sans doute de t'attaque dans un premier temps à projet un peu moins compliqué qui ne partirait pas d'un format de fichier complexe comme peut l'être celui que tu présente...

    Autrement :

    Si l'on en croit Médinoc, le fichier est compressé.

    Cela signifie qu'il faudra commencer par créer une méthode qui décompresse le fichier en vue d'obtenir quelque chose d'exploitabe (et qu'il faudra penser, une fois les modifications apportées, à le recompresser).

    Il faudra donc choisir et apprendre à utiliser une bibliothèque qui te permette de mener ces opérations à bien (libzip, zlib ou similaire)

    D'après le format que tu nous présente, une fois décompressé, le fichier utilise un format XML.

    Le plus facile est donc de te choisir et d'apprendre à utiliser une bibliothèque qui permette de gérer ce format, au début de l'application, pour récupérer les informations (après avoir décompressé le fichier d'origine), en fin d'application, pour apporter les modifications apportées(avant de compresser le résultat)

    enfin, il faudra quand même que tu crée toute la logique nécessaire pour apporter les modifications que tu souhaites.

    Selon tes souhaits, il n'est pas impossible que tu veuilles disposer d'une interface graphique pour te faciliter le travail...

    Là encore, il faudra faire un choix parmis les bibliothèque existantes, et apprendre à t'en servir.

    Comme les messages précédents te l'auront sans doute fait comprendre, les bibliothèques permettant de gérer le XML sont nombreuses et celle permettant la compression de fichier le sont à vrai dire tout autant )

    L'avantage, c'est que la plupart des bibliothèques "visuelles" fournissent également des possibilités de "parsing" XML et de compression /décompression...

    Quant à la doc que l'on te conseille de lire, il s'agit:
    • de celle fournie par google en ce qui concerne le fichier de données
    • de celle de chacune des bibliothèque que tu auras décidé d'utiliser
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  14. #14
    Membre à l'essai
    Inscrit en
    Juillet 2008
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 44
    Points : 19
    Points
    19
    Par défaut
    Je veux en fait exporter les données du fichier fournit par google earth (en fait je me suis renseigné et google earth exporte ses fichiers sous la forme .kmz, c'est leur manière d'exporter les données , et c'est à l'utilisateur d'en faire ce que bon lui semble) dans un autre fichier (texte ou peu importe) .

    J'ai fait du C++ cette année (je n'en ai pas fait beaucoup) , avec de la manipulation de fichier, mais c'était des fichiers avec quatre entiers dessus, et pas 1500 lignes avec de nombreux caractères ... donc oui je suis un novice en la matière, mais je m'améliore!

    mais je pense avoir trouvé pour arriver à extraire les lignes (enfin, on m'a bien aidé, enormement même). C'est à base de ifstream,ofstream et getline .
    Donc à priori cela devrait aller.

    Cependant je vais quand même continuer la recherche sur le XML car ça à l'air plus facile...

    Merci à tous !

  15. #15
    Membre éclairé Avatar de befalimpertinent
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    561
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Avril 2007
    Messages : 561
    Points : 833
    Points
    833
    Par défaut
    Disons que le parser Xml s'inscrirait plus dans un projet à long ou moyen terme. Mais si a court terme tu veux juste récupérer 3 lignes bien précises dans un fichier tu peut te débrouiller avec les streams (sinon ça fait un peu usine à gaz).

    Par contre ça serait dommageable de commencer avec les streams puis si tu veux apporter des modifications à ton programmes et lire des nouvelles lignes de ton kmz de continuer à base de stream. Au final cela te conduirait à écrire un parser en entier alors que de très bonnes bibliothèques existes.

    A toi de voir.
    Bon courage
    Linux > *

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 12
    Dernier message: 13/05/2014, 17h48
  2. Extraire des lignes d'un fichier .csv
    Par cre31400 dans le forum Fortran
    Réponses: 5
    Dernier message: 27/11/2009, 13h56
  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. Extraire des lignes d'un fichier en commande bash
    Par newnew dans le forum Linux
    Réponses: 3
    Dernier message: 27/07/2004, 16h22

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