JAVA CSV 写作 Space 不带引号
JAVA CSV writing Space without quotes
我正在使用 Apache Commons CSV 库来编写 CSV 文件。
提供给我的样本有一个奇怪的模式。
预期样本输出:
- 带名称的名称,Phone,动作,日期
- "John Doe,Officer",正在调查中,2017 年 6 月 8 日
- 杰克,+123-4567,虚假指控,2017 年 6 月 4 日
可以看出,Name with designation 列可以有带逗号的值。所以他们需要被引用。
但是,有些值的 space 为空,例如 phone no,它只能为空 space,或者 Action 列,其中值可以包含空 space(中间或结尾)。
现在,当我使用 apache 公共库编写 CSV 时,我使用了以下 CSVFormat 和 CSVPrinter class。
CSVFormat.EXCEL.withQuoteMode(QuoteMode.MINIMAL));
此配置给出了最接近示例的输出。但是,空 space 或尾随 space 的值,也就是说,即使没有逗号,也会被引用。
我的输出:
- 带名称的名称,Phone,动作,日期
- "John Doe,Officer"," ",正在调查中,2017 年 6 月 8 日
- 杰克,+123-4567,"False Allegation ",2017 年 6 月 4 日
我需要的是,当最后只有space或space,并且value没有逗号时,引号就不会出现
Apache Commons 中是否有我遗漏的任何配置?或者是否有任何其他 CSV 库具有提供此输出的格式?
univocity-parsers 为所欲为。试试这个代码:
CsvWriterSettings settings = Csv.writeExcel();
settings.trimValues(false); //values are trimmed by default
settings.setHeaders("Name with designation","Phone","Action","Date");
settings.setHeaderWritingEnabled(true);
StringWriter output = new StringWriter();
CsvWriter writer = new CsvWriter(output, settings);
writer.writeRow("John Doe,Officer"," ","Under investigation","8-Jun-2017");
writer.writeRow("Jack","+123-4567","False Allegation ","4-Jun-2017");
writer.close();
System.out.println(output);
输出将是:
Name with designation,Phone,Action,Date
"John Doe,Officer", ,Under investigation,8-Jun-2017
Jack,+123-4567,False Allegation ,4-Jun-2017
希望对您有所帮助。
免责声明:我是这个图书馆的作者。它是开源且免费的(Apache 2.0 许可证)
您可以使用super-csv. That follows the RFC-4180
CsvListWriter c = new CsvListWriter(new PrintWriter(System.out), CsvPreference.STANDARD_PREFERENCE);
c.write(Lists.newArrayList(" Aa", " ", " John \"Doe\"", "Comma,", "test "));
c.flush();
c.close();
写:
Aa, ," John ""Doe""","Comma,",test
Maven 依赖项:
<!-- https://mvnrepository.com/artifact/net.sf.supercsv/super-csv -->
<dependency>
<groupId>net.sf.supercsv</groupId>
<artifactId>super-csv</artifactId>
<version>2.4.0</version>
</dependency>
我正在使用 Apache Commons CSV 库来编写 CSV 文件。
提供给我的样本有一个奇怪的模式。
预期样本输出:
- 带名称的名称,Phone,动作,日期
- "John Doe,Officer",正在调查中,2017 年 6 月 8 日
- 杰克,+123-4567,虚假指控,2017 年 6 月 4 日
可以看出,Name with designation 列可以有带逗号的值。所以他们需要被引用。 但是,有些值的 space 为空,例如 phone no,它只能为空 space,或者 Action 列,其中值可以包含空 space(中间或结尾)。
现在,当我使用 apache 公共库编写 CSV 时,我使用了以下 CSVFormat 和 CSVPrinter class。
CSVFormat.EXCEL.withQuoteMode(QuoteMode.MINIMAL));
此配置给出了最接近示例的输出。但是,空 space 或尾随 space 的值,也就是说,即使没有逗号,也会被引用。
我的输出:
- 带名称的名称,Phone,动作,日期
- "John Doe,Officer"," ",正在调查中,2017 年 6 月 8 日
- 杰克,+123-4567,"False Allegation ",2017 年 6 月 4 日
我需要的是,当最后只有space或space,并且value没有逗号时,引号就不会出现
Apache Commons 中是否有我遗漏的任何配置?或者是否有任何其他 CSV 库具有提供此输出的格式?
univocity-parsers 为所欲为。试试这个代码:
CsvWriterSettings settings = Csv.writeExcel();
settings.trimValues(false); //values are trimmed by default
settings.setHeaders("Name with designation","Phone","Action","Date");
settings.setHeaderWritingEnabled(true);
StringWriter output = new StringWriter();
CsvWriter writer = new CsvWriter(output, settings);
writer.writeRow("John Doe,Officer"," ","Under investigation","8-Jun-2017");
writer.writeRow("Jack","+123-4567","False Allegation ","4-Jun-2017");
writer.close();
System.out.println(output);
输出将是:
Name with designation,Phone,Action,Date
"John Doe,Officer", ,Under investigation,8-Jun-2017
Jack,+123-4567,False Allegation ,4-Jun-2017
希望对您有所帮助。
免责声明:我是这个图书馆的作者。它是开源且免费的(Apache 2.0 许可证)
您可以使用super-csv. That follows the RFC-4180
CsvListWriter c = new CsvListWriter(new PrintWriter(System.out), CsvPreference.STANDARD_PREFERENCE);
c.write(Lists.newArrayList(" Aa", " ", " John \"Doe\"", "Comma,", "test "));
c.flush();
c.close();
写:
Aa, ," John ""Doe""","Comma,",test
Maven 依赖项:
<!-- https://mvnrepository.com/artifact/net.sf.supercsv/super-csv -->
<dependency>
<groupId>net.sf.supercsv</groupId>
<artifactId>super-csv</artifactId>
<version>2.4.0</version>
</dependency>