2017-03-18 68 views
-2

灌裝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 

那麼你應該接着又8 18,dont之前「沒有價值」線9,rule。另外,正如你所看到的,有時候有兩個或多個具有相同數字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??? 

任何幫助將不勝感激。我卡住了!

回答

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; 
    } 
} 
+0

工程就像一個魅力。非常感謝你,祝你有個愉快的日子:) – NoobNe0

+0

@ NoobNe0太棒了,我很高興能幫上忙。 – Titus

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++; 
    } 
+0

不幸的是我覺得有什麼不對,因爲它循環indefinetely – NoobNe0

+0

忘了增加它the'if'塊。修復。 –

+0

這不是問題..我仍然得到 1;無靶 2;無靶 3;無靶 4;無靶 5;無靶 6;無靶 7;無靶 8;無靶 9;無靶 10;無靶 11;無靶 12;無靶 13;無目標 – NoobNe0