0

我试图想出一种方法来删除 CSV 中的一行,如果它包含某个值并且不确定哪种结构最好使用?

我想将文件读入内存并将其存储在结构中的变量中,然后评估该结构并删除所需的行。

例子:

aaa, 1, cat, car

bbb, 2, dog, truck

ccc, 1, bird, truck

ddd, 3, dog, car

eee, 3, mouse, car

fff, 2, cat, car

我想要做的是删除整行,如果它包含 2

到目前为止,我已经尝试将它放在地图中,但我不确定如何评估和删除这条线。我也可以不把那条线写到地图上。

class csvConsume {

    static void main(args) {
            def mapList = []

            File csvFile = new File("testData.csv")

            csvFile.eachLine { line ->
                def parts = line.split(",")
                def tmpMap = [:]

                tmpMap.putAt("FirstCol", parts[0])
                tmpMap.putAt("SecondCol", parts[1])
                tmpMap.putAt("ThirdCol", parts[2])
                tmpMap.putAt("FourthCol,", parts[3])


                // etc.

                mapList.add(tmpMap)

                print(tmpMap)


            }

    }
}
4

1 回答 1

0

是的你可以!

def csvFile = '''
aaa, 1, cat, car
bbb, 2, dog, truck
ccc, 1, bird, truck
ddd, 3, dog, car
eee, 3, mouse, car
fff, 2, cat, car'''.trim()

def mapList = []

csvFile.splitEachLine( /,\s*/ ){ parts ->
    if( '2' != parts[ 1 ] ) mapList << [ FirstCol:parts[0], SecondCol:parts[1], ThirdCol:parts[2] ]
}

assert mapList*.SecondCol.contains( '1' )
assert !mapList*.SecondCol.contains( '2' )
assert mapList*.SecondCol.contains( '3' )
于 2019-10-02T14:15:35.430 回答