新手在这里有一个问题。我有下面的.csv文件作为一个例子:
10;06.07.2022;This is test;
08;01.07.2020;This is test;
15;06.07.2021;This is test;
09;06.07.2021;This is test;
因此,它的多个行具有相同的设置。我想删除每一行的日期早于06.07.2022。所以在理论上,只有第一行应该仍然在.csv文件中,其他行应该被删除。
我希望能够将日期声明为一个变量。我已经做了下面的工作来尝试理解:
private String dateii = 'test.csv'; // Filename Input
private String dateio = ''; // Filename Output
void openInputfile() {
File outputfile = new File(dateio);
outputfile.write('');
File inputfile = new File(dateii);
if (!inputfile.exists()) {
println("No File")
}
List data = inputfile.readLines();
for (String zeile in data) {
if (zeile.startsWith('BEREICH')) {
Header = zeile;
} else {
List buffer = zeile.split(";");
if (zeile.size() > 0) { // Remove Empty rows
}
}
}
编辑:
所以我的问题如下:
1.如何删除完整的行?
1.如何使用日期指定要删除的行?
谢谢你,谢谢你
3条答案
按热度按时间tkqqtvp11#
这似乎是一个家庭作业,所以我会很简短,并省略代码。
首先,将目标日期定义为
LocalDate
对象。您现有的程式码每一列都有一个字段清单。您的目的是透过比较第二个字段(日期)来筛选。
1.提取第二个字段,输入日期。
1.将该日期输入解析为
LocalDate
。使用DateTimeFormatter
对象进行解析,并使用您定义的格式模式。1.使用
LocalDate#isBefore
比较日期。1.如果符合条件,则将该行写入输出文件。如果不符合条件,则移到下一行,并从输出文件中忽略当前行。
堆栈溢出的所有方面都已经被讨论过很多次了。搜索以了解更多。
提示:Java NIO.2.java有处理文件的旧方法,也有新方法。使用新方法。
你问:
如何删除完整的行?
跳过它。不要将该行写入输出文件。
你问:
如何使用日期指定要删除的行?
将日期字段的文本解析为
LocalDate
。使用LocalDate
方法(如isAfter
或isBefore
)与目标日期进行比较。顺便说一下,更好的命名将使您的代码更容易阅读和调试。
data
是模糊的。buffer
是inaccurate。Header
应该以小写字母header
开头。在实际工作中,我们不会直接解析CSV文件,而是使用Java生态系统中的几个优秀的CSV解析库中的任何一个。例如:Apache Commons CSV。
watbbzwu2#
在Groovy中,如果输入文件如此简单,则代码可能如下所示-否则最好使用csv库
nx7onnlm3#
给定包含以下行的输入文件
projects/test.csv
:以下Groovy脚本:
在文件
projects/filtered.csv
中生成以下输出:这是你要找的吗?
它利用了惯用的Groovy代码快捷方式和现代的
java.time
日期操作类。