csv - Groovy - CSVParsing - 如何在不使用任何外部库的情况下在双引号外用逗号分割字符串
问题描述
我有一个如下所示的 CSV 文件
COL1,COL2,COL3,COL4
3920,10163,"ST. PAUL, MN",双城
我想读取文件并将它们拆分在双引号之外,而不使用任何外部库。例如在上面的 CSV 中,我们需要将它们分成 4 个部分,分别为
1. 3920
2. 10163
3. ST。明尼苏达州保罗
4. 双城
我尝试将正则表达式与以下代码一起使用,但从未奏效。我想使用 Groovy 代码完成这项工作。我尝试了 Java 中给出的不同解决方案。但无法实现解决方案。
注意:我不想使用任何外部 grails/Jars 来完成这项工作。
def staticCSV = new File(staticMapping.csv")
staticCSV.eachLine {line->
def parts = line.split(",(?=(?:[^\"]\"[^\"]\")[^\"]\${1})")
parts.each {
println "${it}"
}
}
解决方案
得到了解决方案:
def getcsvListofListFromFile( String fileName ) {
def lol = []
def r1 = r1 = ",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*\$)"
try {
def csvf = new File(fileName) ;
csvf.eachLine { line ->
def c1 = line.split(r1)
def c2 = []
c1.each { e1 ->
def s = e1.toString() ;
s = s.replaceAll('^"', "").replaceAll('"\$', "")
c2.add(s)
}
lol.add(c2) ;
}
return (lol)
} catch (Exception e) {
def eMsg = "Error Reading file [" + fileName + "] --- " + e.getMessage();
throw new RuntimeException(eMsg)
}
}
推荐阅读
- java - android - 点击列表后显示奖励视频广告
- repository - 无法访问 LAN 内的 Sonatype Nexus OSS 存储库
- php - mysqli::__construct():客户端未知的身份验证方法 [caching_sha2_password]x
- c++ - 用 g++ 5.4 编译 C++11
- algorithm - 识别文件的最少字节
- delphi - 使用 GDI+ 旋转的图形看起来比原始图形大
- laravel - Laravel Nova - 获取已保存资源的 ID
- javascript - 如何在弹出窗口中调用 javascript 命令?
- splunk - 为传递搜索字符串中的字段的 csv 文件的每一行运行子查询
- excel - .Range().Find() 在使用字符串对象时抛出“需要对象”错误