csv - Groovy 拆分 CSV

标签 csv groovy split

我有一个 csv 文件(details.csv),比如

ID,NAME,ADDRESS
1,"{foo,bar}","{123,mainst,ny}"
2,"{abc,def}","{124,mainst,Va}"
3,"{pqr,xyz}","{125,mainst,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}"

spilt(",") 用逗号(,) 分割数据,但我希望我的结果为
1
"{foo,bar}"
"{123,mainst,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,NAME,ADDRESS
1,"{foo,bar}","{123,mainst,ny}"
2,"{abc,def}","{124,mainst,Va}"
3,"{pqr,xyz}","{125,mainst,IL}"'''

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

哪个打印:
ID: 1, NAME: {foo,bar}, ADDRESS: {123,mainst,ny}
ID: 2, NAME: {abc,def}, ADDRESS: {124,mainst,Va}
ID: 3, NAME: {pqr,xyz}, ADDRESS: {125,mainst,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 )
}

然后像上面一样使用

关于csv - Groovy 拆分 CSV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11995167/

相关文章:

ruby - 导轨 : CSV Array to string (convert)

MySQL将同一表中不同列的多值字符串拆分到新表中

split - 为什么我们应该在将 StratifiedKFold() 作为 GridSearchCV 的参数传递时调用 split() 函数?

java - 使用grab和RESTClient尝试简单的groovy脚本

sql - 将列表传递给SQL每行调用Groovy

Tomcat、Groovy 和干净的 url

R 按选定行号动态分割数据帧/子集 - 解析文本网格 praat

c# - XML 到 CSV 使用 c# 而不使用 xslt

python - 在python中加载1GB大json文件时如何解决内存错误?

c# - 通过 CSV 文件将 MySQL 转换为 Azure SQL