使用“缺失”行填充csv

时间:2017-03-18 11:59:12

标签: java csv

我制作了一个输出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???

非常感谢任何帮助。我被卡住了!

2 个答案:

答案 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++;
    }