groovy 筛选CSV文件的行,我想根据变量跳过一定数量的行

qyuhtwio  于 2022-11-01  发布在  其他
关注(0)|答案(1)|浏览(90)

我有以下计划:

import java.time.format.DateTimeFormatter
import java.time.LocalDate

def firstLine = this.args[4]
def filteredOutput
String file = this.args[0]
String outputFile = file + "_filtered.csv"
def pathInput = "../input/" + file
def pathOutput = "../output/" + outputFile
String td = this.args[1]
def keyField = this.args[2]
def path = this.args[3]
final FMT = DateTimeFormatter.ofPattern('dd.MM.yyyy')

def lineCounter = 0

//Integer.parseInt(keyField)
//println keyField

def targetDate = LocalDate.parse(td, FMT)

def test = new File(pathInput)
def filtered = new File(pathOutput)
filteredOutput = filtered.newPrintWriter()

if (firstLine>lineCounter) {
    lineCounter = lineCounter +1
}

else {
    test.filterLine(filteredOutput) { line ->
   def parts = line.split(';')
   def lineDate = LocalDate.parse(parts[Integer.parseInt(keyField)], FMT)
   lineDate >= targetDate
}

}

println pathInput
println pathOutput

它读取一个CSV文件,并删除所有日期早于我在参数中给予的日期的行。我读取的文件有一个标题行,其中列的名称。我想在第二行开始过滤,或者更好地基于一个变量,以更灵活。正如你所看到的,我试图捕捉这种情况下,如果否则,并计数到我想跳过的行,但没有'I don“我脑子里的计划并没有完全实现。
我目前的程式码可以做到吗?

7bsow1i6

7bsow1i61#

我找到了解决方案。我删除了解析targetDate的步骤。因为我想在新文件中1:1复制没有日期的行,所以这样做更好。有日期的行被选中并删除,而没有日期的行将保持不变。

相关问题