Groovy脚本删除csv文件中包含特定值的行
我试图想出一种方法来删除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 到目前为止,我已经尝试将其放置在地图中,但我不确定如何评估
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字符串的拆分与原始问题无关