2016-03-14 3 views
0

J'utilise SuperCSV pour analyser un fichier CSV. Cela fonctionne parfaitement. Le fichier CSV que je transmets peut contenir des enregistrements non valides. À ce moment-là, est-il possible d'enregistrer quelle ligne n'est pas traitée?Ajout de la ligne d'erreur dans le journal en cas d'échec de SuperCSV

List<InputBean> csvContentsList = new ArrayList<InputBean>(); 
ICsvBeanReader beanReader = new CsvBeanReader(fileReader, CsvPreference.STANDARD_PREFERENCE); 
InputBean bean = null; 
do { 
    try { 
     bean = beanReader.read(InputBean.class, header, getProcessors()); 
     if (bean != null) 
      csvContentsList.add(bean); 
    } catch (Exception e) { 
     logger.error("Error in parsing the record:"+e.getMessage()); 
    } 
} while (bean != null); 

Dans ce code, si le fichier CSV contient enregistrement non valide, il renvoie une erreur et il est pris dans le bloc catch. Comment pourrait-on imprimer cet enregistrement invalide? ou le numéro de ligne de celui-ci?

+1

Si vous ne voulez pas attraper des exceptions, vous pouvez également mettre en œuvre cette aide d'un processeur cellulaire qui supprime et recueille chaque exception. Voir [ici] (http://stackoverflow.com/questions/13646982/validate-every-field-in-a-single-pass-with-supercsv/13658467#13658467) pour un exemple. –

Répondre

0

S'il y a une ligne non valide lors du traitement d'un fichier CSV avec la méthode beanreader.read(...), puis la documentation indique que SuperCsvException est jeté à partir de laquelle vous pouvez demander CsvContext avec la méthode getCsvContext() et de ce que vous pouvez obtenir toutes sortes d'informations de contexte, y compris le numéro de ligne. Soyez donc plus précis dans ce que vous attrapez et manipulez-le de manière appropriée.

Documentation connexe:

https://super-csv.github.io/super-csv/apidocs/org/supercsv/io/ICsvBeanReader.html

https://super-csv.github.io/super-csv/apidocs/org/supercsv/exception/SuperCsvException.html#getCsvContext--

https://super-csv.github.io/super-csv/apidocs/org/supercsv/util/CsvContext.html

+0

Ici l'exception est IllegalArgumentException car le nombre de colonnes ne correspond pas ... En tout cas merci pour le pointeur. – Ram