我有一个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 ) }
然后如上所述使用它