Je dois charger et utiliser les données d'un fichier CSV en C++. À ce stade, il peut s'agir d'un analyseur de données délimitées par des virgules (c'est-à-dire qu'il ne faut pas se soucier de l'échappement des nouvelles lignes et des virgules). Le besoin principal est un analyseur ligne par ligne qui retournera un vecteur pour la ligne suivante à chaque fois que la méthode est appelée.
J'ai trouvé cet article qui semble assez prometteur : http://www.boost.org/doc/libs/1_35_0/libs/spirit/example/fundamental/list_parser.cpp
Je n'ai jamais utilisé Boost's Spirit, mais je suis prêt à l'essayer. Mais seulement s'il n'y a pas une solution plus directe que je néglige.
11 votes
J'ai regardé
boost::spirit
pour l'analyse syntaxique. Il est plus destiné à l'analyse grammaticale qu'à l'analyse d'un simple format de fichier. Quelqu'un de mon équipe a essayé de l'utiliser pour analyser le XML et c'était une douleur à déboguer. Ne vous approchez pas deboost::spirit
si possible.51 votes
Désolé Chrish, mais c'est un mauvais conseil. Spirit n'est pas toujours une solution appropriée mais je l'ai utilisé - et continue de l'utiliser - avec succès dans un certain nombre de projets. Comparé à des outils similaires (Antlr, Lex/yacc etc.) il a des avantages significatifs. Maintenant, pour analyser un CSV, c'est probablement trop...
4 votes
@MattyT IMHO
spirit
est assez difficile à utiliser pour une bibliothèque de combinateurs d'analyseurs. Ayant eu une certaine expérience (très agréable) avec Haskells(atto)parsec
bibliothèques Je m'attendais à ce que (l'esprit) fonctionne aussi bien, mais j'ai abandonné après m'être battu avec des erreurs de compilation de 600 lignes.1 votes
C CSV Parser : sourceforge.net/projets/cccsvparser C CSV Writer : sourceforge.net/projets/cccsvwriter
0 votes
Pourquoi ne pas vouloir échapper aux virgules et aux nouvelles lignes ! Toutes les recherches renvoient à cette question et je n'ai pas pu trouver une seule réponse qui prenne en compte l'échappement ! :|