2014-02-18 106 views
0

我需要從CSV文件中提取特定列的數據,輸出也應該是CSV格式。 我已經經歷了大約從CSV中提取數據的多種解決方案走了,但他們沒有關於CSV格式提取它本身以csv格式自行提取csv文件中的特定列

舉例談到:

public partial class Form1 : Form 
     { 
      public Form1() 
      { 
       InitializeComponent(); 

       string filePath = "abc.csv"; 

       string csvContnet = File.ReadAllText(filePath); 

       // E.g. Suppose above csv has 9 columns 
       // And column headers are from A,B,C...I 
       // Now I want to select data from columheaders B,C and F along with header 
       string requiredCsvContent = this.GetRequiredCsvContent(csvContnet); 
      } 

      /// <summary> 
      /// Following function returns required CSV content from main csv File 
      /// </summary> 
      /// <param name="csvContnet"></param> 
      /// <returns></returns> 
      private string GetRequiredCsvContent(string csvContnet) 
      { 

      }} 
+1

你能發表一個例子嗎? – ken2k

+0

請通過編輯 – Nilesh

+0

你能否澄清一下這個例子?你有9個標題(A - > I),但只有7列? – ken2k

回答

0

您的數據看起來像一個TSV(製表符分隔值)文件。只需將全部內容複製到剪貼板中並粘貼到Excel中即可。然後,刪除除D,E和F以外的所有列。最後,轉到文件>另存爲> CSV。

+1

我想使用c#.net而不是手動完成它。 – Nilesh

1

我會建議你使用File.ReadLinesFile.ReadAllLines這樣你可以得到你想要LINQ容易的:

var lines = File.ReadLines("asd") 
       .Skip(1) // header 
       .Select(line => 
       { 
        var parts = line.Split(','); 
        return string.Join(",", parts[1], parts[2], parts[5]); 
       }).ToList(); 

這應該在逗號分隔格式返回ABF列。

0

如果我正確讀取它,您想要從列B,C和F中提取標題和數據,並將輸出轉換爲CSV格式的字符串?嘗試了這一點,使用IdComLog.Data(全面披露,我是它的作者):

var data = from row in IdComLog.Data.Formats.Csv.ReadRecords("inputFile.csv") 
      select new[]{ row[1].Value, row[2].Value, row[5].Value } 

var sw = new StringWriter(); 
IdComLog.Data.Formats.Csv.Write(sw, data); 

string requiredCsvContent = sw.ToString(); 

強烈推薦不使用Split()Join()與CSV工作。它會打破非平凡的數據。