Problème de virgule textuelles dans un fichier CSV

Comment traiter les virgules à l'intérieur d'un champ texte sans que le texte ne soit divisé en champ

a marqué ce sujet comme résolu.

Voilà, je suis lancé dans mon projet de logiciel de valeur nutritive et je suis en train de faire un logiciel pour convertir les fichiers CSV relationnels du FCEN de Santé Canada en une BDD H2.

J'utilise OpenCSV pour extraire les champs de mes fichiers CSV, et je suis bloqué sur un problème. Voici lequel:

Les champs dans les fichiers sont séparé par des virgules. Mais parmi les champs il arrive qu'il y ait un champ texte entre " qui inclus des virgules qui viennent alors perturber le fonctionnement de OpenCSV.

Exemple, la ligne de champs suivante: 4,4,22,20,"Chop suey, with meat, canned","Chop suey, avec viande, conserve",1981-01-01,,,

Dans le 5e champ, les virgules font obstruction…

J'utilise la ligne de code suivante pour ouvrir mon fichier CSV:

1
CSVReader rdFoodName = new CSVReader(new FileReader("*****/Java/Neon/Nutrion/cnf-fcen-csv/FOOD NAME.csv"), ',', '\'', 1);

J'ai de la difficulté à saisir le fonctionnement du paramètre \ '.

Il exite un autre constructeur de CSVReader qui ajoute un au paramètre entre le quotechar et le line, c'est le escape, dont je n'arrive pas à saisir la fonctionnalité, voici ce qu'en dit la documentation:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
public CSVReader(Reader reader,
         char separator,
         char quotechar,
         char escape,
         int line)

Constructs CSVReader.

Parameters:
    reader - The reader to an underlying CSV source.
    separator - The delimiter to use for separating entries
    quotechar - The character to use for quoted elements
    escape - The character to use for escaping a separator or quote
    line - The number of lines to skip before reading

Alors voilà, savez-vous s'il y a un moyen avec OpenCSV ou autre de pouvoir traiter différemment ces virgules textuelles? Si nécessaire, je pourrais vous zipper mon projet et vous le rendre disponible… A+ Nemo

+0 -0

La paramètre quotechar semble être ce que tu as besoin de modifier. Si je me fit à la doc que tu as donné, c'est justement le paramètre qui est censé indiquer avec quel caractère tu entoure les chaines qui contiennent des virgules.

Actuellement tu lui passe la valeur '\'' qui correspond au caractère '. Essai de replacer ça par '"' puisque tu nous dis que c'est le caractère " qui semble entourer les chaines.

+1 -0

De rien. En vrai c'est toi qui a fait tout le vrai boulot : tu as posé une question précise avec des détails et toutes les informations nécessaires.

Ça doit faire 10 ans que je n'ai pas écris une ligne de Java et donc j'ai jamais utilisé ta lib. Mais avec la doc j'ai put t'apporter un point de vue extérieur.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte