2010-09-01 5 views
1

J'essaye d'analyser un fichier de csv dans un tableau 2d, où chaque rangée est une entrée de données et chaque colonne est un champ dans cette entrée.Comment analyser correctement le fichier CSV en 2d Array?

Faire cela en même temps simplifie et sépare mon code de traitement de mon code d'analyse.

J'ai essayé d'écrire un analyseur simple qui a utilisé String.Split pour séparer le fichier par des virgules. C'est une approche horrible comme je l'ai découvert. Il échoue complètement à analyser tous les cas spéciaux comme les guillemets doubles, les sauts de ligne et d'autres caractères spéciaux.

Quelle est la bonne façon d'analyser un fichier CSV dans un tableau 2d comme je l'ai décrit?

Des échantillons de code en Java seraient appréciés. Le tableau peut être un objet liste dynamique ou un vecteur ou quelque chose comme ça, il doit juste être indexable avec deux indexeurs.

Répondre

0

Regardez Commons CSV?

CSVParser parser = new CSVParser(new FileReader(file)); 
String[] line; 
while ((line = parser.getLine()) != null) { 
    // process 
} 
0

Si votre fichier contient des champs avec des entrées doubles cités qui contiennent des séparateurs et des champs avec des sauts de ligne, que je doute que ce soit un vrai fichier csv ... un fichier csv approprié est quelque chose comme ça

1;John;Doe;engineer,manager 
2;Bart;Foo;engineer,dilbert 

tout cela est « autre chose »:

1;John;Doe;"engineer;manager" 
2;Bart;Foo; 
    "engineer,dilbert" 

Et le premier exemple est analysable avec String.split sur chaque ligne.

+0

Les fichiers CSV peuvent être beaucoup plus compliqués. Lisez cette spécification formelle ici: http://supercsv.sourceforge.net/csvSpecification.html et vous verrez que les retours à la ligne, les doubles quotes et autres sont autorisés dans les citations – CodeFusionMobile

0

Nous avons eu ce même problème, il y a quelques mois, donc alors nous avons créé une solution dans C#, avec environ un lecteur qui implémente une interface IEnumerable, et dans chaque interation lit une nouvelle ligne du csv.

Je ne sais pas si je peux fournir le code, si vous avez un intérêt dans la solution, je peux aller plus loin dans les détails pour vous aider à en créer un nouveau.