Ich habe eine CSV-Datei mit 37 Spalten, die ich in Java mit Apache Commons CSV 1.2 analysiere. Mein Setup-Code lautet wie folgt:Fehleranalyse aufgrund von CSV-Unterschieden vor/nach dem Speichern (Java mit Apache Commons CSV)
//initialize FileReader object
FileReader fileReader = new FileReader(file);
//intialize CSVFormat object
CSVFormat csvFileFormat = CSVFormat.DEFAULT.withHeader(FILE_HEADER_MAPPING);
//initialize CSVParser object
CSVParser csvFileParser = new CSVParser(fileReader, csvFileFormat);
//Get a list of CSV file records
List<CSVRecord> csvRecords = csvFileParser.getRecords();
// process accordingly
Mein Problem ist, dass, wenn ich die CSV-Kopie an mein Zielverzeichnis zu verarbeiten und mein Parsing-Programm ausführen, ich die folgende Fehlermeldung erhalten:
Exception in thread "main" java.lang.IllegalArgumentException: Index for header 'Title' is 7 but CSVRecord only has 6 values!
at org.apache.commons.csv.CSVRecord.get(CSVRecord.java:110)
at launcher.QualysImport.createQualysRecords(Unknown Source)
at launcher.QualysImport.importQualysRecords(Unknown Source)
at launcher.Main.main(Unknown Source)
jedoch Wenn ich die Datei in mein Zielverzeichnis kopiere, öffne und speichere sie, dann probiere das Programm erneut, es funktioniert. Das Öffnen und Speichern der CSV fügt die Kommas, die am Ende benötigt werden, zurück, so dass mein Programm nicht davon ausgehen kann, dass es nicht genug Header zum Lesen gibt.
Für Kontext, hier ist eine Probenleitung von vor/nach dem Speichern:
Vor (Fehlern): "Daten", "Daten", "Daten", "Daten"
Nach (in Betrieb) : "Daten", "Daten" ,,,, Daten ",,," Daten ",,,,,
Also meine Frage: Warum ändert sich das CSV-Format, wenn ich es öffne und es speichere? Ich ändere keine Werte oder Codierung, und das Verhalten ist beim MS-DOS oder regulären .csv-Format das gleiche. Außerdem verwende ich Excel zum Kopieren/Öffnen/Speichern in meinem Test.
Gibt es eine Codierung oder Formateinstellung, die ich verwenden muss? Kann ich das programmatisch lösen?
Vielen Dank im Voraus!
EDIT # 1:
Weitere Kontext, als ich zum ersten Mal eine leere Zeile in der ursprünglichen Datei anzuzeigen, hat es gerade die neue Linie^M Zeichen wie folgt aus:
^M
Nach Öffnung in Excel und speichern, es sieht aus wie dies mit allen 37 meiner leeren Felder:
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,^M
Ist dies eine Diskrepanz Windows-Kodierung?
Toller Input, danke für die Zeit. Ich habe auch gerade gelesen, dass RFC 4180 der Standard ist, nach dem Excel eine "nicht konforme" CSV-Datei speichert, was wiederum der Grund dafür ist, dass ich die Kommas nach dem Speichern sehe. Ich werde versuchen, meinen eigenen Reader zu implementieren, weil ich ihn programmatisch lösen muss. – corneria