我正在阅读Groovy中的CSV文件,就像这样......
inputFile.eachLine { rawLine ->
def line = rawLine.split(',')
def name = line[0]
def occupation = line[1]
}
但是CSV中的某些值在逗号之前只有一个条目,如下面的第三个示例...
Jim, Salesman
Michael, Manager
Creed,
Pam, Receptionist
当它到达第三个条目时,它会给出一个java.lang.ArrayIndexOutOfBoundsException:1。
检查此项并使其跳过此类记录的最佳方法是什么?
答案 0 :(得分:3)
如果您允许使用第三方库作为答案,则可以采用以下方法:( @Grab
功能可以在脚本中使用此功能。)
@Grab('com.xlson.groovycsv:groovycsv:1.0')
import static com.xlson.groovycsv.CsvParser.parseCsv
def inputFile = new File("abc.csv")
def text = inputFile.getText()
def data = parseCsv(text)
data.each { def line ->
def name = line.getAt(0)
def occupation = line.getAt(1)
println "name: ${name} occupation: ${occupation}"
}
它处理用例而不做任何更改,解析器比大多数人想要实现的更强大。
答案 1 :(得分:1)
在Java中,您可以像这样检查数组的长度:
String[] line = rawLine.split(',');
if(line.length > 1) {
String name = line[0];
String occupation = line[1];
...
}
在groovy中应该是类似的东西。
答案 2 :(得分:0)
一个非常简单的解决方案就是一个例子:
def s = "S,"
def l = s.tokenize(",")
def x = l[1]?:"No Value"
println x
打印"没有价值"在控制台
因此,在您的代码中,您可以使用:
inputFile.eachLine { rawLine ->
def line = rawLine.tokenize(',')
def name = line[0]
def occupation = line[1]?:""
}