【发布时间】:2015-06-16 17:38:14
【问题描述】:
考虑以下代码示例:
private static CSVFormat CSV_FORMAT = CSVFormat.TDF;
logger.debug("Processing record: {}", line);
try {
CSVParser parser = CSVParser.parse(line,CSV_FORMAT);
if(parser.getRecords().isEmpty()) continue;
csvRecord = parser.getRecords().get(0);
} catch (IOException e) {
logger.warn("Skipping line: " + line,e);
continue;
}
由于某种原因,这不是解析。我得到以下输出:
调试: (OrderParser#parseData:121) - 处理记录: 136147091 340834429 2015 年 4 月 5 日 4:35:00 PM 262105109 UFH6285 6 0 0 HWF62 福尔摩斯加湿器更换 过滤器 8.99 53.94 0 39.91 0 8.09 0 5.94 5.12 7035997658 马蒂·乔 aa3003@mail.com 杰斯 Dude 555 Main st Anywhere CA 900000 1 java.lang.IndexOutOfBoundsException:索引:0,大小:0
尽管您可能无法通过 StackOverflow 看到这一点,但我保证那里有标签。但是,索引越界异常发生在 parser.getRecords().get(0)
如果我打电话给parser.getRecordNumber(),它会报告1。不知道是字符编码错误还是什么原因。
根据要求,这里有一些示例输入夹在 pre 标记内。这里有两行,但我只是发送第二行:
SNumber RecD Receip_ID ListingID Date_Entered 234 ReferenceId QT QT2 QT3 Title P456 Product_Rev Sh2687t Product Shipping Comm ShipFee PerItemFee Tax_Cost Company HoneCode Bill455 Bill788 Email Ship468644 Ship6489 Ship654132158 Ship98198 Ship_To_City Ship_To_State Ship_To_Zip ShippingMethodId 2644 7775 11457 26894 4/9/2015 9:47:00 AM 247520128 700364 1 0 0 Shark Navigator 14.99 14.99 0 11.75 0 2.25 0 0.99 0 84698 Shawn Vanloan 3504620ae7f03@mail.com s vanloo 166 EMain Rd Anywhere NY 12000 1【问题讨论】:
-
嗯,你上面的输出显然有空格而不是 TAB 字符。
-
是的,就像我说的:我不认为让人们复制 n 粘贴制表符
-
尝试将您的 CSV 样本放入 pastebin.com 之类的内容中,然后在此处链接。如果没有看到你的程序正在读取什么,就很难调试它。 (另外,如果是敏感的客户信息,请将名称和地址更改为更通用的名称)
-
实际上,当你编辑它时,你可以看到标签,所以我相信你。但请自行编辑并在
<pre>标签内重新粘贴输出 - 使用引号格式似乎也在那里添加了换行符。或者换行符可能来自您的输出?line有多少行? -
感谢您的反馈:不知道我们是否可以使用 pre,所以我现在已经添加了该数据并编辑了任何敏感信息
标签: java csv apache-commons