2017-02-17 64 views
0

我有很多不同的CSV文件與其中的數據(包括標題)。在csv文件中的位置編號2中添加列c#

我無法弄清楚如何在第二位添加新列。

我可以使用空值(每行)填充新單元格,但新列處於第一位置。

請參閱附件圖片:新列必須位於IDINTA列之後。

enter image description here

任何人可以幫助我嗎?

在此先感謝以下

我的代碼。

output = System.Web.HttpContext.Current.Server.MapPath("/public/target.csv"); 

string[] CSVDump = File.ReadAllLines(output); 
List<List<string>> CSV = CSVDump.Select(x => x.Split('|').ToList()).ToList(); 
for (int i = 0; i < CSV.Count; i++) 
{ 
    CSV[i].Insert(0, i == 0 ? "Headername" : "Filename"); 
} 
File.WriteAllLines(output, CSV.Select(x => string.Join("|", x))); 

#Edit 01

enter image description here

#Edit 02

N|IDINTA|Filename|DDMMYYYY HHMMSS| 
+0

我能想到的方式是;將csv轉換爲DataTable。一旦數據在DataTable中存在,您可以在任何你想要的位置添加列。 – A3006

+0

那麼你想插入哪一列?你能告訴我們它前後應該是什麼樣子嗎? – wkl

+0

@wkl請參閱#在我的第一個問題中編輯02 –

回答

1

簡單地改變指數在Insert聲明:

CSV[i].Insert(2, i == 0 ? "Headername" : "Filename"); 

使用所希望的位置的變量,完整的代碼如下:

// define the desired position here: 
int posNewColumn = 2; 

output = System.Web.HttpContext.Current.Server.MapPath("/public/target.csv"); 

string[] CSVDump = File.ReadAllLines(output); 
List<List<string>> CSV = CSVDump.Select(x => x.Split('|').ToList()).ToList(); 
for (int i = 0; i < CSV.Count; i++) 
{ 
    if(CSV[i].Count > posNewColumn) 
    { 
     CSV[i].Insert(posNewColumn , i == 0 ? "Headername" : "Filename"); 
    } 
    else 
    { 
    // append the new data at the end if the existing line is too short. 
    // You may want to do nothing instead or fill the appropriate number 
    // of empty cells before adding. 
     CSV[i].Add(i == 0 ? "Headername" : "Filename"); 
    } 
} 
File.WriteAllLines(output, CSV.Select(x => string.Join("|", x))); 
+0

謝謝你的幫助。請在我的第一個問題中查看**#編輯01 ** –

+0

@AntonioMailtraq如果您收到錯誤消息,指出索引必須在列表的範圍內,那麼我認爲csv中有一行比其他行短。你應該檢查一下。如果這是一項要求,請將其添加到問題中。 – wkl

+0

您的csv中可能有一行比其他行短,但編輯了數百行 –

0

這應該這樣做。

output = System.Web.HttpContext.Current.Server.MapPath("/public/target.csv"); 

string[] CSVDump = File.ReadAllLines(output); 

var CSV = CSVDump.Select(x => x.Split('|').ToList()); 

var newInserted = CSV.Aggregate(new List<List<String>>(), (l, i) => 
{ 
    i.Insert(1, (l.Count == 0) ? "header" : "fileName"); 
    l.Add(i); 
    return l; 
}); 

File.WriteAllLines(output, newInserted.Select(x => string.Join("|", x))); 
+0

謝謝,但用您的代碼不添加新列。 –

+0

lemme check,那麼它不會出現在newInserted變量中? – kemiller2002

+0

括號錯誤) –