Groovy Split CSV

我有一个csv文件(details.csv)

ID,NAME,ADDRESS
1,"{foo,bar}","{123,mainst,ny}"
2,"{abc,def}","{124,Va}"
3,"{pqr,xyz}","{125,IL}"

当我使用时(注意:我在上面有其他闭包从目录中读取所有csv文件)

if(file.getName().equalsIgnoreCase("deatails.csv")) {
 input = new FileInputStream(file)
 reader = new BufferedReader(new InputStreamReader(input))
 reader.eachLine{line-> def cols = line.split(",")
 println cols.size() }

而不是获得大小3我得到6与值

1
"{foo
bar}"
"{123
mainst
ny}"

spilled(“,”)用逗号(,)分割数据,但我希望我的结果为

1
"{foo,bar}"
"{123,ny}"

我怎样才能解决这个问题.请帮忙!谢谢

解决方法

编写csv解析器是一项棘手的工作.

我会让别人做艰苦的工作,并使用like GroovyCsv

以下是如何使用GroovyCsv解析它

// I'm using Grab instead of just adding the jar and its
// dependencies to the classpath
@Grab( 'com.xlson.groovycsv:groovycsv:1.0' )
import com.xlson.groovycsv.CsvParser

def csv = '''ID,IL}"'''

def csva = CsvParser.parseCsv( csv )
csva.each {
  println it
}

哪个印刷品:

ID: 1,NAME: {foo,bar},ADDRESS: {123,ny}
ID: 2,NAME: {abc,def},ADDRESS: {124,Va}
ID: 3,NAME: {pqr,xyz},ADDRESS: {125,IL}

因此,要获取第二行的NAME字段,您可以执行以下操作:

def csvb = CsvParser.parseCsv( csv )
println csvb[ 1 ].NAME

哪个打印

{abc,def}

当然,如果CSV是文件,您可以这样做:

def csvc = new File( 'path/to/csv' ).withReader {
  CsvParser.parseCsv( it )
}

然后如上所述使用它

相关文章

背景:    8月29日,凌晨4点左右,某服务告警,其中一个...
https://support.smartbear.comeadyapi/docs/soapui/steps/g...
有几个选项可用于执行自定义JMeter脚本并扩展基线JMeter功能...
Scala和Java为静态语言,Groovy为动态语言Scala:函数式编程,...
出处:https://www.jianshu.com/p/ce6f8a1f66f4一、一些内部...
在运行groovy的junit方法时,报了这个错误:java.lang.Excep...