我使用Groovy导入CSV基本上有效,但并非适用于所有字段。
对于某些字段,我得到ArrayIndexOutOfBoundsException
我的输入文件如下所示:
Bonbons /t hustenbonbons-und-halsbonbons /t csd00301 /t true /t /t /t Bonbons /t csd00298 /t "<h3>Bonbons</h3>\n<div align=""justify"">Bei Rachenproblemen wie z. B." /t /t
脚本如下所示:
inFile.eachLine(){
def fields = it.split("\t")
def xsiteCode = fields[0]
def seoName = fields[1]
def code = fields[2]
def indi = fields[3]
当我尝试使用HTML等(/t "<h3>Bonbons</h3>\n<div align=""justify"">Bei Rachenproblemen wie z. B." /t
)
(我把/ t放在他分隔字段的制表器中)。它是HTML和特殊标志的问题,或者为什么我会得到这个错误,我怎么能逃避呢?
答案 0 :(得分:2)
重申@tim_yates所说的话,请避免让您头疼,并考虑使用现有的CSV解析器。它将允许您继续处理更重要的事项。这是一个例子:
@Grab('com.opencsv:opencsv:3.5')
import com.opencsv.CSVReader
def reader = new StringReader('''Bonbons \t hustenbonbons-und-halsbonbons \t csd00301 \t true \t \t \t Bonbons \t csd00298 \t "<h3>Bonbons</h3>\n<div align=""justify"">Bei Rachenproblemen wie z. B." \t \t''')
reader.withReader {
new CSVReader(it, '\t' as char).each { line ->
println line*.trim()
}
}
字段如下所示:
[Bonbons, hustenbonbons-und-halsbonbons, csd00301, true, , , Bonbons, csd00298, <h3>Bonbons</h3>
<div align="justify">Bei Rachenproblemen wie z. B.", , ]
答案 1 :(得分:0)
一个问题是将正则表达式转义为"\\t"
。另一个问题(对我来说)是确保文本编辑器不使用软标签。
def s = "a b c d"
def fields = s.split("\\t")
assert 4 == fields.length
assert "a" == fields[0]
assert "b" == fields[1]
assert "c" == fields[2]
assert "d" == fields[3]