2017-01-02 3 views
3

Hallo Ich habe eine CSV-Datei, wo das Einkapseler-Zeichen nicht ordnungsgemäß maskiert ist.Parsing CSV-Datei, wo Einkapseler in Inhalt nicht richtig maskiert ist

Beispiel

[email protected],"uhrege gerjhhg er<span style="background-color: rgb(0,153,0);">eriueiru kernger</span><font color="#009900"><span style="background-color: rgb(255,255,255);"> weiufhuweifbw fhew fibwefbw</span></font><div><font color="#009900"><span style="background-color: rgb(255,255,255);">wekifbwe fewf</span></font></div><div><font color="#009900"><span style="background-color: rgb(255,255,255);">weiuifgewbfjew f</span></font></div>",18-Oct-2016, 

Delimiter ->,

Encapsulator -> "

Es bricht, wenn ich versuche mit commons-csv-Reader zu lesen, wirft eine 'invalid char between encapsulated token and delimiter' Exception

.

Microsoft Excel scheint jedoch die Datei perfekt zu öffnen .. Irgendwelche Ideen, wie proc ed? .

Wie CSV-Dateien zu analysieren, wo der Einkapseler nicht ordnungsgemäß maskiert ist. Excel scheint solche Dateien in Ordnung zu öffnen.

+1

Ich fand dies nützlich http://stackoverflow.com/questions/15210568/java-csv-parser-with-unescaped-quotes Libre Büro und Excel scheinen zu sein eine fundierte Vermutung nehmen. Wie mache ich das Gleiche? –

Antwort

1

Wenn Sie dies an der Quelle nicht beheben sind (dh ein wohlgeformtes csv), und Sie wollen, dass diese selbst zu analysieren, können Sie den einfachen Weg gehen:

Scan FIELD1 bis zu ," - field2 bis ", - Rest ist Feld3 (nachkommendes Komma?).

Natürlich, wenn ein ", im HTML-Feld auftritt, gibt es ein Problem. Sie könnten das lösen, indem Sie zuerst bis ," scannen und dann rückwärts (beginnend am Ende der Zeile) bis ",.

Wenn es mehr Felder, als Sie hier zeigen, könnten Sie für eine mit einem " kombiniert , aussehen (beide Kombinationen, auch "," sein könnte) und hoffen, dass diejenigen, erscheinen nicht in den Felddaten.

0

univocity-parsers verfügt über einen CSV-Parser, der diese Art von Eingaben richtig verarbeiten kann.

//first configure the parser 
    CsvParserSettings settings = new CsvParserSettings(); 
    settings.setUnescapedQuoteHandling(UnescapedQuoteHandling.STOP_AT_CLOSING_QUOTE); 

    //then create a parser and parse your input line: 
    CsvParser parser = new CsvParser(settings); 
    String[] result = parser.parseLine("" + 
      "[email protected],\"uhrege gerjhhg er<span style=\"background-color: rgb(0,153,0);\">eriueiru kernger</span><font color=\"#009900\"><span style=\"background-color: rgb(255,255,255);\"> weiufhuweifbw fhew fibwefbw</span></font><div><font color=\"#009900\"><span style=\"background-color: rgb(255,255,255);\">wekifbwe fewf</span></font></div><div><font color=\"#009900\"><span style=\"background-color: rgb(255,255,255);\">weiuifgewbfjew f</span></font></div>\",18-Oct-2016,"); 

    //here's the result (one value per line) 
    for (String v : result) { 
     System.out.println(v); 
    } 

Diese Drucke:

[email protected] 
uhrege gerjhhg er<span style="background-color: rgb(0,153,0);">eriueiru kernger</span><font color="#009900"><span style="background-color: rgb(255,255,255);"> weiufhuweifbw fhew fibwefbw</span></font><div><font color="#009900"><span style="background-color: rgb(255,255,255);">wekifbwe fewf</span></font></div><div><font color="#009900"><span style="background-color: rgb(255,255,255);">weiuifgewbfjew f</span></font></div> 
18-Oct-2016 
null 

Hoffe, es hilft.

Haftungsausschluss: Ich bin der Autor dieser Bibliothek. Es ist Open-Source-und frei (Apache v2.0 Lizenz)

Verwandte Themen