我制作了一个输出csv文件的程序:
9,rule
18,dont
19,Ive
19,advice
19,foundations
26,Sigh
29,nothing
29,nothing
33,name
我想做两件事:
首先,我想创建一个新的csv,它填充第一个中的“缺失”行。这意味着例如在9,rule
之前添加8行,如下所示:
1,no value
2,no value
3,no value
4,no value
5,no value
6,no value
7,no value
8,no value
然后你应该在9,rule
之前有18,dont
后跟另外8个“无值”行。
此外,正如您所看到的,有时会有两个或多个具有相同数字ID的值,例如与19行。我只想要第一个。
不幸的是我无法提出任何有效的解决方案。
我正在使用CommonsCSV来读取文件,所以这是一个好的开始:
Reader in = new FileReader("path-to-csv-file");
Iterable<CSVRecord> records = CSVFormat.RFC4180.parse(in);
String id = new String();
String target = new String();
for (CSVRecord record : records) {
id = record.get(0); // gets the id
target = record.get(1); // gets the string after ,
// WHAT NOW???
非常感谢任何帮助。我被卡住了!
答案 0 :(得分:1)
试试这个:
int prevId = 0;
for (CSVRecord record : records) {
id = record.get(0);
target = record.get(1);
if(id == preId+1){
System.out.println(id + " " + target);
prevId = id;
}else if(id > prevId+1){
prevId++;
for(; prevId < id; prevId++){
System.out.println(prevId + " no target");
}
System.out.println(id + " " + target);
prevId = id;
}
}
答案 1 :(得分:0)
使用变量作为计数器变量,如果id匹配则打印值,否则打印所有值,直到达到id等效值。
int _id = 1;
for (CSVRecord record : records) {
id = record.get(0);
target = record.get(1);
while (_id != id) {
// Print _id,no value
_id++;
}
// Print _id,target
_id++;
}