2 votes

OpenCSV CSVWriter n'ajoute pas le caractère quote pour l'élément null

J'ai une exigence où je dois envelopper tous les éléments avec le caractère quote.

J'utilise CSVWriter pour écrire les lignes.

CSVWriter writer = new CSVWriter(new FileWriter(rptFileName),`CSVWriter.DEFAULT_SEPARATOR, CSVWriter.DEFAULT_QUOTE_CHARACTER);

Lorsqu'un élément est une chaîne vide, il englobe le guillemet et s'il est nul, il n'ajoute pas le caractère guillemet.

alors la sortie de mu devient comme ça.

"ABC",,"","DEF"

ce que je veux comme

"ABC","","","DEF"

Ici le 2ème élément est null et le 3ème élément est une chaîne vide.

Existe-t-il un moyen dans OpenCSV de réaliser cela sans intervention manuelle ?

0voto

Ivan Pronin Points 1389

Je ne pense pas que vous puissiez faire cela avec CSVWriter en mode "automatique". Il suffit d'attribuer manuellement des fichiers vides "" à la valeur null Chaînes dans votre code.

0voto

Jeronimo Backes Points 4055

Comme vous ne voulez pas modifier chaque ligne manuellement, vous pouvez donner à l'option univocity-parsers un aller :

//configure writer
CsvWriterSettings settings = new CsvWriterSettings();
settings.setQuoteAllFields(true);

Si vous écrivez des lignes (ou des listes de lignes) :

//create writer with given config and output file
CsvWriter writer = new CsvWriter(new File(rptFileName), "UTF-8", settings);

//get your data from somewhere
List<Object[]> dataToWrite = getDataFromSomewhere();

//write everything.
writer.writeRowsAndClose(dataToWrite);

Si vous déchargez des données d'un ResultSet :

ResultSet rs = getDataFromSomewhere();
new CsvRoutines(settings).write(rs, new File(rptFileName), "UTF-8");

Cela fera ce que vous voulez, sans avoir à modifier manuellement votre entrée.

Divulgation : Je suis l'auteur de cette bibliothèque, elle est open-source et gratuite (licence Apache 2.0).

0voto

Scott Conway Points 702

Non, le CSVWriter a été délibérément conçu de cette façon pour que le CSVReader puisse faire la différence entre ce qui est nul et ce qui est une chaîne vide. Les versions ultérieures ont ajouté un CSVReaderNullFieldIndicator pour que l'utilisateur puisse décider de ce qui est nul (s'il y a un nul) mais la même chose n'a pas été étendue au CSVWriter. Vous devrez donc faire une intervention manuelle si vous souhaitez rester avec openCSV.

Si une intervention manuelle n'est pas possible, vous pouvez utiliser les bibliothèques Apache Commons pour vous aider.

String[] copyArray = ArrayUtils.clone(originalValues);
for (int i = 0; i < copyArray.size; i++) {
   copyArray[i] = StringUtils.defaultString(copyArray[i]);
}

//  now use the CSVWriter to write the copyArray.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X