2011-05-05 89 views
3

我正在尋找一種在CSV文件的不同單元格中編寫字符串的方法。使用C#編寫CSV文件

我使用這個程序,

private void button1_Click(object sender, EventArgs e) 
    { 
     string filePath = @"E:\test.csv"; 

     string a = "a"; 
     string b = "c"; 
     string c = "d"; 
     string d = "d"; 

     File.WriteAllText(filePath, a); 
     // how can add the other strings in the next cells ? 
    } 

我需要在這裏是寫在第二單元「一」中的第一個單元格,「B」,C ..

回答

3

CSV絕對不是一個簡單的文件格式,它是一個足夠精細的格式,能夠涵蓋幾乎任何類型的數據,無論形狀或大小。

CSV格式能夠處理可選參數與非可選參數,有或沒有換行符的數據,並且應該能夠在沒有換行符的任何字段中使用或不使用字段轉義字符,並且需要字段轉義帶有換行符的字段中的字符。

你不應該用手工處理CSV文件,你應該使用FileHelpers來處理CSV文件。

此時我不再使用FileHelpers作爲我的goto CSV解析庫,我使用Josh Close中的CsvHelper

+2

CSV的問題在於沒有固定的格式(依賴於文化),有些應用程序使用它們自己的實現。然而,每個實施都相對簡單。有關更多信息,請參閱http://en.wikipedia.org/wiki/Comma-separated_values。 – 2011-05-05 18:27:39

+0

是否可以使用Excel文件? – 2011-05-05 18:31:42

+0

我用.xls嘗試過,但結果相同嗎? – 2011-05-05 18:33:32

10

CSV是一個非常簡單的文件格式,特別是如果你不需要任何單元格來包含嵌套逗號。 CSV意味着逗號分隔值,所以您只需要一種方法在每個單元格之間用逗號構造一個字符串。這將工作,但它只適用於單行:

File.WriteAllText(filePath, String.Join(",", a, b, c, d)); 
+0

+1對於'String.Join()' – CodingWithSpike 2011-05-05 18:24:23

+1

-1對於String.Join,這將被包含換行符或保留字符的任何參數完全破壞。 – 2011-05-05 18:26:07

+0

@Chris - 是的,這並沒有考慮引用,逗號等任何細節。但一個簡單的解決方案可能是絕對的初學者最容易使用的。 – Justin 2011-05-05 18:33:02

0

如果只有4個值和一行? (我認爲是不是這種情況?)

string csv = string.Format("{0},{1},{2},{3}\n", a,b,c,d); 
File.WriteAllText(filePath, csv); 

如果數據是基於某種集合,給一些更多的信息。

+0

-1這將被任何包含換行符或保留字符的參數破壞。 – 2011-05-05 18:26:35

+0

是的,這不是一個通用的解決方案,絕對不打算成爲編寫CSV文件的全部解決方案。然而,在許多情況下,以這種(或類似的)方式構建一個CSV(或任何分隔的)文件是完全可以接受的,因爲傳入的數據處於預期的或清晰的格式。我的解決方案(以及賈斯汀的解決方案)將用於問題中的示例。 – Jon 2011-05-05 19:02:24