我想使用Grails插件中的CSVWriter,但我不知道如何更改默认引号和值分隔符。我也想知道如何避免标题行。
我的代码(无效)
Writer writer = new StringWriter()
CSVWriter w = new CSVWriter(writer, {
testdata.eachWithIndex { row, index ->
"${row}" {it."${row}"}
}
})
w.quote = "'"
w.valueSeperator = ";"
w.quote无效
答案 0 :(得分:2)
Here是Grails CVS插件的源代码。在我看来,与CSVReader 相反,CSVWriter在构造函数选项中不接受覆盖分隔符等。
CSVWriter(Writer writer, Closure definition)
<强>更新强>
正如评论中暗示的那样,我试图改变子类中的引号字符。这很有效,但不幸的是标题行存在问题(包含两个** null *字符串)。我无法解决这个问题。
import org.grails.plugins.csv.CSVWriter
/* Groovy Version: 2.4.4 */
@groovy.transform.InheritConstructors
class MyCSVWriter extends CSVWriter {
private columns = [:]
private cachedQuote
private cachedQuoteEscape
private cachedQuoteReplace
private cachedValueSeperator
private cachedRowSeperator
private producers
private lastProducer
private headingsWritten = false
protected getQuote() {
"'"
}
protected getQuoteEscape() {
"'"
}
protected getValueSeperator() {
","
}
protected getRowSeperator() {
"\n"
}
}
def sw = new StringWriter()
def b = new MyCSVWriter(sw, {
col1 { it.val1 }
col2 { it.val2 }
})
b << [val1: 'a', val2: 'b']
b << [val1: 'c', val2: 'd']
println b.writer.toString()
'col1'null'col2'null
'a','b'
'c','d'
答案 1 :(得分:0)
我不知道你是否解决了这个问题,但我遇到了同样的问题,我已经能够改变,例如valueSeperator
设置属性的值{{1} }。所以在你的例子中,你可以这样做:
cachedValueSeperator
我希望这可以提供帮助。