groovy - 使用 opencsv 从 csv 文件中删除引号

标签 groovy formatting opencsv

我正在尝试在 csv 文件中添加更改数据:

这是示例数据:

DATE        status       code                       value     value2
"2016-01-26","Subscription All","119432660","1315529431362550","0.0080099833517888"
"2016-01-26","Subscription All","119432664","5836995058433524","0.033825584764444"
"2016-01-26","Subscription All","119432664","8287300074499777","0.076913377834744"
"2016-01-26","Subscription All","119432664","14870697739968326","0.0074188355187426"

我用于格式化数据的代码:

    CSVReader reader = new CSVReader(new FileReader(new File(fileToChange)), CSVParser.DEFAULT_SEPARATOR, CSVParser.NULL_CHARACTER, CSVParser.NULL_CHARACTER, 1)
    info "Read all rows at once"
    List<String[]> allRows = reader.readAll();

    CSVWriter writer = new CSVWriter(new FileWriter(fileToChange), CSVWriter.DEFAULT_SEPARATOR, CSVWriter.NO_QUOTE_CHARACTER)
    writer.writeAll(allRows)
    writer.close()

我得到的输出是这样的,添加了额外的引号而不是删除它。

""2016-01-26"",""Subscription All"",""119432660"",""1315529431362550"",""0.0080099833517888""
""2016-01-26"",""Subscription All"",""119432664"",""5836995058433524"",""0.033825584764444""
""2016-01-26"",""Subscription All"",""119432664"",""8287300074499777"",""0.076913377834744""
""2016-01-26"",""Subscription All"",""119432664"",""14870697739968326"",""0.0074188355187426""

我想删除引号。 请有人帮忙。

另外,是否可以将日期格式更改为 yyyymmdd 而不是 yyyy-mm-dd?

   allRows.each { String[] theLine ->
        String newDate = theLine[0].replaceAll('-', '')
        String newline = theLine.eachWithIndex { String s, int i -> return i > 0 ? s : newDate}
        writer.writeLine(newline)
    }

谢谢

最佳答案

当您实例化 CSVReader 时,您告诉它不要将任何字符视为引号,因此它将现有引号读取为数据并且不会删除它们。

当您告诉 CSVWriter 不要添加任何引号时,它尊重您的请求。但是,输入数据包含引号字符,并且在 CSV 中的字符串内包含引号的约定是将引号加倍。就这样 字符串值

ABC"DEF

在 CSV 中编码为

"ABC""DEF"

因此,您看到的结果是不删除输入上的引号(您告诉它不要删除),然后将输出上的引号加倍的组合。

要解决此问题,请将输入选项从 NULL_CHARACTER 更改为 DEFAULT_QUOTE_CHARACTER。但请注意,如果您的任何数据实际上包含嵌入的引号或逗号,则生成的输出将不是有效的 CSV。

此外,我认为这可能是针对 OpenCSV 的有效错误报告。我相信,当您告诉 OpenCSV 省略引号时,它可能会通过运行时异常来通知您是否将生成无效的 CSV。尽管我想他们可能会争辩说你选择在没有网络的情况下工作并且应该接受你得到的任何东西。就我个人而言,我倾向于“最小惊喜原则”,恕我直言,当输出未加引号时,不要使用双引号。

关于groovy - 使用 opencsv 从 csv 文件中删除引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35139982/

相关文章:

c# - 在 Windows 应用程序中使用 C# 在 Excel 中使用不同颜色突出显示数据

java - 如何在 Groovy 中传递值

groovy - 解释这段 Groovy 代码?

python - 如何为 python 中的所有 print() 输出设置前缀?

swift - Swift 中带有格式说明符的 NSLocalizedString 会产生垃圾

android - 使用希伯来语文本创建 CSV 文件

android - 使用groovy解析android xml的命名空间错误

java - 使用 Groovy 将 bean 序列化和反序列化为 json

java - `Import from illegal package` 错误

java - 使用 openCSV 导出数据时是否可以删除分隔符?