Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Groovy脚本删除csv文件中包含特定值的行_Csv_Groovy_Groovyscriptengine - Fatal编程技术网

Groovy脚本删除csv文件中包含特定值的行

Groovy脚本删除csv文件中包含特定值的行,csv,groovy,groovyscriptengine,Csv,Groovy,Groovyscriptengine,我试图想出一种方法来删除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 到目前为止,我已经尝试将其放置在地图中,但我不确定如何评估

我试图想出一种方法来删除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)


            }

    }
}
是的,你可以

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' )
def csvFile=''
aaa,1,猫,汽车
bbb,2,狗,卡车
ccc,1,鸟,卡车
ddd,3,狗,汽车
eee,3,鼠标,汽车
fff,2,cat,车辆“”。配平()
def映射列表=[]
csvFile.splitEachLine(/,\s*/){parts->

如果('2'!=零件[1])地图列表太棒了,谢谢你,Injecteer..我遇到了这个解决方案的一个问题,提供给我的CSV文件有一些不幸的特征..里面有一些值,比如CSV中的Smith,Bob,E,它们是同一列数据的一部分..当使用逗号拆分时..一旦遇到逗号,它就会拆分该部分。@Cylus您应该更加注意分割regexp。如果行部分被分割为逗号+制表符组合,您应该使用
/,\t/
,因此在进一步检查后,他们所做的是这样的。eee,3,“一个句子,里面有一个逗号。”,car,dog。我遇到的问题是它分割它并映射“一个句子,里面有一个逗号。”分为两部分。CSV字符串的拆分与原始问题无关