首页 > 解决方案 > 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}"
}
}

标签: csvgroovy

解决方案


得到了解决方案:

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) 
    }
}

推荐阅读