grails - Groovy CSV解析器并导出到数据库

标签 grails groovy csv

如何在不解析第一行的情况下解析CSV文件?

该类工作正常,但我不想解析CSV的 header 。

import groovy.sql.Sql

class CSVParserService {

    boolean transactional = false

    def sql = Sql.newInstance("jdbc:mysql://localhost/RProject", "xxx", "xxx", "com.mysql.jdbc.Driver")

    def CSVList = sql.dataSet("ModuleSet")

    def CSVParser(String filepath, boolean header) {

      def parse = new File(filepath)

      // split and populate GeneInfo
      parse.splitEachLine(',') {fields ->

        CSVList.add(
                Module : fields[0],
                Function : fields[1],
                Systematic_Name : fields[2],
                Common_Name : fields[3],
              )

         return CSVList
      }

    }
}

我更改了类(class),所以现在有了:
import groovy.sql.Sql

class CSVParserService {

    boolean transactional = false

    def sql = Sql.newInstance("jdbc:mysql://localhost/RProject", "xxx", "xxx", "com.mysql.jdbc.Driver")

    def CSVList = sql.dataSet("ModuleSet")

    def CSVParser(String filepath, boolean header) {

    def parse = new File(filepath).readLines()[1..-1]

    parse.each {line ->

      // split and populate GeneInfo
      line.splitEachLine(',') {fields ->

        CSVList.add(
                Module : fields[0],
                Function : fields[1],
                Systematic_Name : fields[2],
                Common_Name : fields[3],
              )

         return CSVList
      }
     }
    }
}

正常工作,直到我的CSV中的这一部分:
“智人白介素4受体(IL4R),转录变体1,mRNA。”

当我的解析器得到此部分时,他切入3(应为1):
-智人白细胞介素4受体(IL4R)
-笔录变体1
-mRNA。

我该如何解决?
谢谢您的帮助。

-新评论-
这是我的CSV行的副本(第二行):
“M6.6”,NA,“ILMN_1652185”,NA,NA,“IL4RA; CD124”,NA,“NM_000418.2”,“16”,“16p12.1a”,“智人白细胞介素4受体(IL4R),转录变体1,mRNA。“,3566,...

如您所见,我的问题在于“智人白细胞介素4受体(IL4R),转录变体1,mRNA”。 ;我不想在“和”之间剪切文本。我的解析器应该只在引号之间分割','(但不要在引号之间使用逗号)。
例如,我有:“part1”,“part2”,“part3”,我只想剪切part1,part2,part3,如果我的part2中有逗号,则我不想剪切这些逗号。

总结起来,我只想忽略引号中的逗号。

最佳答案

您可以使用以下命令将文件的第一行以外的每一行读入List中:

List<String> allLinesExceptHeader = new File(filepath).readLines()[1..-1]

然后,可以使用类似于上面显示的代码来解析文件的每一行(allLinesExceptHeader的元素)
allLinesExceptHeader.each {line ->    
    // Code to parse each line goes here
}

关于grails - Groovy CSV解析器并导出到数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1884484/

相关文章:

Jenkins 共享库实例化 util 类并在工作流脚本中使用

java - 使用 Shiro 通过 LDAP 对用户进行身份验证

linux - Jenkins (linux) 和 EnvInject on node (Windows) 文件访问

java - 优化 CSV 处理脚本 - Python、Perl 和 Java

grails - 如何在TagLib中使用pngRenderingService.render获取图像标签而不是<img>

grails - Grails Remote -无法解析类(class)

grails - 如何在 grails Controller 中使用路径变量?

grails - Grails渲染模板不同的 Controller /路径

node.js - 使用 Bluebird 将所有 csv 文件读入 Node js 中的 1 个 JSON 对象数组

javascript - jquery 将可排序列表(用户排序)导出到 csv?