2016-06-14 6 views
0
Reader in = new FileReader(dataFile); 
Iterable<CSVRecord> records = CSVFormat.RFC4180.withFirstRecordAsHeader().withIgnoreEmptyLines(true).withTrim().parse(in); 

     // Reads the data in csv file until last row is encountered 
     for (CSVRecord record : records) { 

      String column1= record.get("column1"); 

Hier ist der column1 Wert in CSV-Datei ist so etwas wie „1234557. So WHE ich die Spalte lesen ist es geholt mit Anführungszeichen zu Beginn. Gibt es eine Möglichkeit in Apache commons csv diejenigen überspringendoppelte Anführungszeichen überspringen, wenn CSV-Datei zu lesen Apache Commons mit csv

Beispieldaten aus cSV-Datei. "" "0996108562", "" "204979956"

+1

Dieser Bildschirm Dump ist bedeutungslos. Sieht aus wie eine Momentaufnahme von Excel. Ihr Code liest das nicht, also zeigen Sie uns den tatsächlichen Inhalt der Datei, die von 'dataFile' referenziert wird? Als Text in Frage stellen, keine Bilder einfügen. Aber wahrscheinlich wird es so etwas wie "0996108562", "204979956", zwei CSV-Werte enthalten, wobei das erste Zeichen eines Wertes ein Zitat ist. Der CSV-Parser wird diese nicht ** entfernen, und das sollte er definitiv nicht. Das ist ein Excel-Tick für die Eingabe numerischer Daten als Text und hat nichts mit CSV zu tun. * Entfernen Sie sie selbst, oder fügen Sie sie nicht in Excel hinzu. * – Andreas

Antwort

0

kann nicht mit commons-csv-1.4.jar mit diesem MCVE (Minimal, Complete, and Verifiable example) reproduzieren:

String input = "column1,column2\r\n" + 
       "1,Foo\r\n" + 
       "\"2\",\"Bar\"\r\n"; 
CSVFormat csvFormat = CSVFormat.RFC4180.withFirstRecordAsHeader() 
             .withIgnoreEmptyLines(true) 
             .withTrim(); 
try (CSVParser records = csvFormat.parse(new StringReader(input))) { 
    for (CSVRecord record : records) { 
     String column1 = record.get("column1"); 
     String column2 = record.get("column2"); 
     System.out.println(column1 + ": "+ column2); 
    } 
} 

Ausgang:

1: Foo 
2: Bar 

Die Anführungszeichen um "2" und "Bar" entfernt wurden.

+0

danke für Ihre Hilfe. Aber ich habe den Code ausprobiert und es funktioniert nicht. Ich habe die Frage aktualisiert und ein Beispielbild hochgeladen, wie der CSV aussieht. –

+0

Beim Lesen möchte ich nicht die zusätzlichen Anführungszeichen, die es am Anfang gibt. Mit meinem vorhandenen Code liest es den Wert mit diesem Zitat. –

+0

Weil der Wert * explizit ein Zitat enthält. Der CSV-Parser behält das Zitat * bei, wie es sein sollte *, weil dieses führende Zitat nichts mit CSV zu tun hat. Der CSV-Parser wäre fehlerhaft, wenn er das Zitat entfernt hätte. – Andreas

0

Wenn ich Ihre Anforderung richtig verstehen, müssen Sie unescapeCsv von Apache StringEscapeUtils.As verwenden, der Doc sagt:

Wenn der Wert in doppelte Anführungszeichen eingeschlossen ist, und enthält ein Komma, Newline >> oder doppelte Anführungszeichen, dann werden Anführungszeichen entfernt.

Alle doppelten Anführungszeichen (doppelte Anführungszeichen) sind zu einem doppelten Anführungszeichen entkoppelt.

Wenn der Wert nicht in doppelte Anführungszeichen eingeschlossen ist oder kein Komma, Newline oder Anführungszeichen enthält, wird der String-Wert unverändert zurückgegeben.

+0

können Sie bitte bearbeitete Frage überprüfen Jetzt werden Sie in der Lage sein, die Anforderung zu verstehen. –