使用groovy ArrayIndexOutOfBoundsException

时间:2015-09-18 11:32:48

标签: csv groovy

我使用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和特殊标志的问题,或者为什么我会得到这个错误,我怎么能逃避呢?

2 个答案:

答案 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]