Java opencsv,can';t使用带“的值”;
我使用open csv读取只有两列的csv,例如:Java opencsv,can';t使用带“的值”;,java,csv,opencsv,Java,Csv,Opencsv,我使用open csv读取只有两列的csv,例如: "valueA1","valueB of A1" ,"valueB of A1" ,"valueB of A1" ,"valueB of A1" "valueA2","valueB of A2" ,"valueB of A2" ,"valueB of A2" ,"valueB of A2" 它一直在继续,到目前为止还不错。 当B列上的某些值带有某些字符时,我遇到了问题 例如: 当我的B列有类似于a“的内容时,甚至在某些情况下a:我的打开的cs
"valueA1","valueB of A1"
,"valueB of A1"
,"valueB of A1"
,"valueB of A1"
"valueA2","valueB of A2"
,"valueB of A2"
,"valueB of A2"
,"valueB of A2"
它一直在继续,到目前为止还不错。
当B列上的某些值带有某些字符时,我遇到了问题
例如:
当我的B列有类似于a“的内容时,甚至在某些情况下a:我的打开的csv会丢失所有格式,而不是说我的下一行包含2个值,它会向我显示疯狂的东西,如36、48,并因此丢失大量内容
我怎样才能指定这些值在列B和h中,而不是假设他需要创建一个新列
我正在使用简单的构造函数
reader = new CSVReader(new FileReader(arquivo));
通过研究,我看到一些人说要使用不同的构造函数,我试着这样做
reader = new CSVReader(new FileReader(arquivo), ',','"');
但是结果是一样的,因为构造函数只接受char,我不能做,“首先,我仍然会显式设置分隔符和引号。您说您在
;
方面有问题
CSVReader reader = new CSVReader(new FileReader(arquivo), ',', '\"');
然后是一个数据错误:A1的文本值va“lueB”
,例如Excel会自动转义为:A1的va“lueB”
。我不知道CSVWriter会如何处理双引号
最小侵入性是在读取时更正数据:
CSVReader reader = new CSVReader(new RepairingReader(new FileReader(arquivo)),
',', '\"', '\\');
这里我还为分隔符和引号指定转义字符
CSVReader
使用一个BufferedReader
传递或自己添加,并调用readLine
public class RepairingReader extends BufferedReader {
public RepairingReader(Reader reader, int capacity) {
super(reader, capacity);
}
public RepairingReader(Reader reader) {
super(reader);
}
@Override
public String readLine() throws IOException {
String line = super.readLine();
if (line != null) {
line = line.replaceAll("([^,\\\\])\"([^,])", "$1\\\\\"$2");
}
return line;
}
}
这只会覆盖readLine
。它会重新放置前面有字符(不是反斜杠,不是逗号)和后面有字符(不是逗号)的任何引号。替换应为反斜杠后跟引号
这不是一个完整的解析器,因为这样就可以自己实现一个CSV读取器
顺便说一句:
FileReader
没有选项设置用于将文件转换为Unicode字符串的编码。使用默认平台编码。因此代码不可移植,文件应采用本地编码。使用new InputStreamReader(new FileInputStream(file),encoding)
而不是便携式软件。CSV没有官方标准,但有一个非官方标准,并且您显示的示例不符合该标准。包含双引号字符的值应被引用,值中的双引号字符应被加倍
valueA1,"va""lueB"" of A1"
(在本例中,允许但不要求在“valueA1”周围加双引号。)因为您是自己从XLS文件创建CSV文件的,所以应该解决转换中的问题
如果将Excel 2007另存为“CSV(MS-DOS)(*.CSV)”,则Excel 2007可以正确执行此操作。我记得旧版本的Excel有一个CSV选项屏幕,您可能需要使用它。在将其写入CSV之前,应先将字符串文本中的
“
转义。@bali182您的意思是输入文件并删除所有选项“在运行csv之前?但这也会删除定义csv字段的“”项。您的csv具有vrong格式。联系提供商,让他们修复它。@talex说了什么。这是CSV中的“语法”错误。如果您自己编写,则在将其写入文件之前将其转义,否则,请询问是谁创建了此csv来修复它。我的问题是,创建此csv的是另一家公司,他们是提供信息的唯一方式,没有web服务或类似服务。我需要读取此文件的内容并保存到我的数据库中,是否无法解决此问题?
valueA1,"va""lueB"" of A1"