2014-11-04 15 views
13

sto ottenendo il seguente errore durante l'analisi del file CSV utilizzando la libreria Apache Commons CSV.char non valido tra il incapsulato token e delimitatore in Apache Commons CSV biblioteca

Exception in thread "main" java.io.IOException: (line 2) invalid char between encapsulated token and delimiter 

at org.apache.commons.csv.Lexer.parseEncapsulatedToken(Lexer.java:275) 
at org.apache.commons.csv.Lexer.nextToken(Lexer.java:152) 
at org.apache.commons.csv.CSVParser.nextRecord(CSVParser.java:450) 
at org.apache.commons.csv.CSVParser.getRecords(CSVParser.java:327) 
at parse.csv.file.CSVFileParser.main(CSVFileParser.java:29) 

Qual è il significato di questo errore?

+2

Potete mostrare il file CSV linea 2 in particolare se si tratta di tempo? –

+0

Ecco la riga di esempio 2: "---", "88104310D64DCG", "10-20-2014", "10:03 AM", "10-20-2014", "10:03 AM", "00 : 00: 00 "," "," "," 172.21.128.74 "," "," h323 ", 256," "," OUTGOING ", 45,1,0," "," "," utente: - - "," 172.21.128.74 "," "," "," "," "," "," "," "," Tentativo fallito; "La chiamata è terminata .; Rolling Over. "", 16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 –

+0

Un'altra osservazione è che se apro il file CSV nella cartella di lavoro di Microsoft Excel, apportare alcune modifiche e quindi salvarlo. Ora esegui il programma parser che funziona !! –

risposta

7

Quella riga nel file CSV contiene un carattere non valido tra una delle vostre cellule e uno alla fine della linea, fine del file, o la cella successiva. Una causa molto comune di questo è un errore di escape del tuo carattere incapsulante (il carattere utilizzato per "avvolgere" ogni cella, quindi CSV sa dove inizia e termina una cella (token)

7

Ho trovato la soluzione . problema uno dei miei file CSV ha un attributo come segue:. "attributo con nested "quote""

Grazie alla citazione annidato in l'attributo parser non riesce

per evitare quanto sopra problema sfuggire alla citazione nidificata come segue: "attributo con nested ''" quote "" """"

Questo è l'unico modo per risolvere il problema.

+3

Sembra che [la risposta di Steve Siebert] (http://stackoverflow.com/a/26730109/642706) sia corretta. Suggerisco di accettare la sua risposta (fare clic sul grande segno di spunta vuoto), eliminare la propria risposta mentre si sposta il suo testo a un commento sulla sua risposta. –

1

Ci siamo imbattuti in questo stesso errore con dati contenenti citazioni in input altrimenti non quotati. Cioè .:

some cell|this "cell" caused issues|other data 

E 'stato difficile da trovare, ma in Apache's docs, accennano il metodo withQuote() che può richiedere null come un valore.

Stavamo ottenendo il messaggio di errore esattamente lo stesso e questo (per fortuna) finito che fissa il problema per noi.

+0

Grazie a @Cuga. Abbiamo inserito la citazione e abbiamo analizzato i dati. Il tuo commento ci ha aiutato. – Anand

17

Ci siamo imbattuti in questo problema quando avevamo inserito la citazione nei nostri dati.

0,"020"1,"BS:5252525 ORDER:99999"4 

soluzione applicata era CSVFormat csvFileFormat = CSVFormat.DEFAULT.withQuote(null);

@Cuga punta ci ha aiutato a risolvere. Grazie @Cuga

codice completa è

public static void main(String[] args) throws IOException { 
    FileReader fileReader = null; 
    CSVFormat csvFileFormat = CSVFormat.DEFAULT.withQuote(null); 
    String fileName = "test.csv"; 

    fileReader = new FileReader(fileName); 
    CSVParser csvFileParser = new CSVParser(fileReader, csvFileFormat); 

    List<CSVRecord> csvRecords = csvFileParser.getRecords(); 

    for (CSVRecord csvRecord : csvRecords) { 
     System.out.println(csvRecord); 
    } 
    csvFileParser.close(); 
} 

risultato è

CSVRecord [comment=null, mapping=null, recordNumber=1, values=[0, "020"1, "BS:5252525 ORDER:99999"4]] 
+0

Felice di aver aiutato =) – Cuga

Problemi correlati