Подтвердить что ты не робот

Opencsv в java игнорирует обратную косую черту в значении поля

Я читаю CSV файл, используя opencsv.

Я игнорирую первую строку; CSV файл разделен табуляцией с некоторыми значениями, заключенными в двойные кавычки.

Проблема возникает, когда я читаю значения столбца, который имеет символ '\', это удаляется из значения.

reader = new CSVReader(new FileReader(exchFileObj),'\t','"',1);

Например в оригинальном файле:

address = 12\91buenosaires   

Это становится как:

address = 1291buenosiares

В массиве строк, который генерирует csvreader. Как я могу изменить его, чтобы иметь возможность читать символ '\' также?

4b9b3361

Ответ 2

У меня была такая же проблема, и я не мог найти другого персонажа, которого я мог бы гарантировать, не появлялся бы в моем файле csv. Однако, согласно сообщению на sourceforge, вы можете использовать явный конструктор с '\ 0', чтобы указать, что вам не нужен какой-либо escape-символ.

http://sourceforge.net/tracker/?func=detail&aid=2983890&group_id=148905&atid=773542

CSVParser parser = new CSVParser(CSVParser.DEFAULT_SEPARATOR, CSVParser.DEFAULT_QUOTE_CHARACTER, '\0', CSVParser.DEFAULT_STRICT_QUOTES);

Я провел немного беглых испытаний, и это, кажется, работает очень хорошо, по крайней мере, обратные косые черты, конечно, проделывают это.

Ответ 3

В дополнение к ответу @JMM, вы должны использовать этот созданный CSVParser в конструкторе CSVReader. Единственный доступный конструктор:

public CSVReader(Reader reader, int line, CSVParser csvParser)

Вы можете установить строку в 0, чтобы она ничего не пропустила

Ответ 4

@JMM Я опробовал ваше решение и оно работает нормально для обратной косой черты, но теперь его не удается найти в кавычках, ошибка ниже.

java.io.IOException: Un-terminated quoted field at end of CSV line

Старое состояние

вход: abc\xyz\"234 выход: abcxyz" 234

Новое состояние

вход: abc\xyz\234

вывод: abc\xyz\234 (работает как положено)

вход: abc\xyz\"234 (не удалось для этого ввода)

Ошибка: java.io.IOException: Un-terminated quoted field at end of CSV line: java.io.IOException: Un-terminated quoted field at end of CSV line

new CSVParser(separator, CSVParser.DEFAULT_QUOTE_CHARACTER, '\0', CSVParser.DEFAULT_STRICT_QUOTES);