我有一个CSV文件要读取,示例数据如下:
SEQ NAME GROUP
1 MARK A
2 KEVIN A
3 JOE A
1 MARY B
2 JANE B
3 ANN B
4 MAY B
我找不到一种简单的方法来在 Java 中执行此操作,该方法将读取上面的 CSV 文件并添加另一列,该列只是一个降序序列,如REV
列:
SEQ REV NAME GROUP
1 3 MARK A
2 2 KEVIN A
3 1 JOE A
1 4 MARY B
2 3 JANE B
3 2 ANN B
4 1 MAY B
我知道如何使用缓冲阅读器或扫描仪,但不知道如何基于组列创建反向序列,因为您必须知道每个组的最大长度。
有什么想法吗?
更新:抱歉,我必须使用没有任何库的纯java,因为我们正在使用遗留系统。
你可以尝试使用supercsv,它将为您提供列值map的映射(检查方法CsvMapReader(然后,您可以根据需要对其进行迭代和分组。
希望这有帮助
如果您正在阅读一行,则不知道当前组的组长度。所以把它分成两遍。
刀路 1 仅用于确定每个组的组长度。您可以将其存储在一个Map<String, Integer>
中,组名作为键,并且(到目前为止(最大组长度。对于每一行,您必须查看该组是否已经有一个条目。如果是,请递增该值。如果不是此组的存储 1。
然后在 Pass 2 中,您再次逐行读取文件。但是通过上面的地图,您已经知道当前组的最大组长度。
如果文件太大而无法将所有组存储在内存中,则应将它们存储在文件中,例如使用RandomAccessFile
。但是增加内存更容易。