如何在java中读取和操作来自csv文件的数据?

问题描述 投票:0回答:1

我正在尝试在 Spring 中构建一个程序,该程序读取文件并使用来自文件的数据进行计算。 该文件中我更感兴趣的是时间戳、代码和状态。我想计算不同状态之间的时间戳差异。 为了计算这个差异,我必须记住 UN 应该转到 ACK 或 RTNUN。来自ACK/RTNUN 可以进入 NORM,但不能进入任何其他形式。例如RTNUN到ACK被认为是错误并且不进行任何计算。 (两个州的代码应该相同)。 州UPR只能进入NORM。其余的视为错误,不进行任何计算。

文件结构示例

Timestamp;ISPPE;Sequence;Code;Severity;State;Subsystem;
2023-06-08T13:03:22.653+0200;1223085273;1;FW|110|;E;UN;;
2023-06-08T13:03:28.498+0200;1223091118;1;FW|110|;E;ACK;;
2023-06-08T13:03:28.499+0200;1223091119;1;FW|110|;E;RTNUN;;
2023-06-08T13:03:28.500+0200;1223091120;1;FW|110|;E;NORM;;
2023-06-08T13:04:44.546+0200;1223167018;1;FW|110|;E;UN;;
2023-06-08T13:04:56.750+0200;1223179222;1;FW|110|;E;RTNUN;;
2023-06-08T13:04:56.750+0200;1223179222;2;FW|110|;E;NORM;;
2023-06-08T13:05:33.230+0200;1223215702;1;FW|110|;E;UN;;
2023-06-08T13:05:33.500+0200;1223215972;1;FW|110|;E;RTNUN;;
2023-06-08T13:05:33.500+0200;1223215972;2;FW|110|;E;NORM;;
2023-06-08T13:13:32.562+0200;1223693667;1;FW|110|;E;UN;;
2023-06-08T13:13:32.861+0200;1223693966;1;FW|110|;E;RTNUN;;
2023-06-08T13:13:32.861+0200;1223693966;2;FW|110|;E;NORM;;
2023-06-08T14:33:57.021+0200;1228506046;1;FW|115|;I;UN;Media Input;
2023-06-08T14:35:02.177+0200;1228571031;1;FW|5|;E;UN;Carriage;
2023-06-08T14:35:06.998+0200;1228575852;1;FW|5|;E;RTNUN;Carriage;
2023-06-08T14:35:06.998+0200;1228575852;2;FW|5|;E;NORM;Carriage;
2023-06-21T10:21:28.379+0200;898472;1;FW|2|0.1;F;UPR;E-Module;
2023-06-21T10:21:28.380+0200;898473;1;FW|2|1.0;F;NORM;E-Module;
2023-06-08T14:35:59.566+0200;1228628130;1;FW|110|;E;UN;Media Output Roll;
2023-06-08T14:35:59.634+0200;1228628198;1;FW|115|;I;RTNUN;Media Input Roll;
2023-06-08T14:35:59.634+0200;1228628198;2;FW|115|;I;NORM;Media Input Roll;
2023-06-08T14:35:59.638+0200;1228628202;1;FW|110|;E;RTNUN;Media Output Roll;
2023-06-08T14:35:59.638+0200;1228628202;2;FW|110|;E;NORM;Media Output Roll;

我目前正在做的是读取文件并将数据放入字符串列表中,然后循环遍历它,但是有太多边缘情况,我觉得这不是正确的方法。如果有人能给我其他想法或方法,我将不胜感激

java spring spring-boot algorithm timestamp
1个回答
0
投票

CSV 文件通常是一种易于阅读的格式。 然后,由于格式不足,它们附带了很多插件或例外。只需考虑将包含逗号和换行符的字符串存储为值即可。

为了不必创建另一种奇怪的格式,而是使用已经开发和测试的代码,您可能需要使用 Apache Commons CSV 库。

读取与 Excel 兼容的 CSV 可能如下所示:

Reader in = new FileReader("path/to/file.csv");
Iterable<CSVRecord> records = CSVFormat.EXCEL.parse(in);
for (CSVRecord record : records) {
    String lastName = record.get("Last Name");
    String firstName = record.get("First Name");
}
© www.soinside.com 2019 - 2024. All rights reserved.