java - 读取 CSV 文件并使用 Grails/Groovy 将结果放入 map 中

标签 java csv grails groovy

我正在使用下面的代码读取一个 csv 文件,并希望将结果放入 map 中

def fileName = 'C:/temp/exampleCSV.csv'
        def reader = new CSVReader(new FileReader(new File(fileName)))
        def header = reader.readNext()
        def rows = reader.readAll().collect { row ->
            (0..(row.size()-1)).collectEntries { [header[it], row[it]] }
        }

CSV:

name;cuInfo;service;startDate;appId
Apple;T12;3;14-02-16 10:00;G12351
Apple;T13;3;14-01-16 13:00;G12352
Google;T14;9;10-01-16 11:20;G12301
Microsoft;T15;10;26-02-16 10:20;G12999

但是上面的代码给出了输出:

  [
        [name;cuInfo;service;startDate;appId:Apple;T12;3;14-02-16 10:00;G12351], 
        [name;cuInfo;service;startDate;appId:Apple;T13;3;14-01-16 13:00;G12352], 
        [name;cuInfo;service;startDate;appId:Google;T14;9;10-01-16 11:20;G12301], 
        [name;cuInfo;service;startDate;appId:Microsoft;T15;10;26-02-16 10:20;G12999]
    ]

我想得到如下图所示的结构吗?

[
        [name:"Apple", cuInfo:"T12",service:"3",startDate:"14-01-16 13:22",appId:"G12355"],
        [name:"Apple",cuInfo:"T13",service:"3",startDate:"12-02-16 13:00",appId:"G12356"],
        [name:"Google",cuInfo:"T14",service:"9",startDate:"10-01-16 11:20",appId:"G12300"], 
        [name:"Microsoft",cuInfo:"T15",service:"10",startDate:"26-02-16 10:20",appId:"G12999"]  
    ]

最佳答案

要将 CSV 文件中的数据转换为与查询输出相同的结构( map 列表),您可以这样做:

def reader = new CSVReader(new FileReader(new File(fileName)))
def output = reader.collect { it[0].split(';') }.with { rows ->
    def header = rows.head()
    def dataRows = rows.tail()

    dataRows.collect { row ->
        [header, row].transpose().collectEntries()
    }
}

将 CSV 行拆分为列,收集标题和其余行,然后进行转换。

transpose() 为每个数据行创建这样的结构:

[[name, Apple], [cuInfo, T12], [service, 3], [startDate, 14-02-16 10:00], [appId, G12351]]

collectEntries() 将其转换为 Map:

[name:Apple, cuInfo:T12, service:3, startDate:14-02-16 10:00, appId:G12351]

关于java - 读取 CSV 文件并使用 Grails/Groovy 将结果放入 map 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35843130/

相关文章:

csv - 将 CouchDB 数据库导出到 CSV

grails - 使用grail quartz 插件的多个调度程序

java - 如何检索字符串中匹配模式的索引?

java - 如何从 XML 获取默认值(不起作用)

java - Apache Felix - 如何保证在激活方法之前注入(inject)动态引用

r - 当列名包含空格和特殊字符时从 data.table 包中读取?

java - 我的 Android 应用无法上网

scala - Scala:以一种有效的方式遍历CSV文件吗?

grails - Spring Security @secure无法在Grails中使用角色层次结构

grails - 按日期对grails中的集合进行排序