2014-07-23 70 views
0

我有7個文本框,我想將它們的值寫入一個csv文件。另外,我想爲這些信息寫一個標籤。最終的CSV文件應該是這樣的:同時在一個csv文件中寫兩行

label1----label2----label3----label7 

value1----value2----value3----value7 

這是我的代碼:

public void CreatingCsvFiles() 
     { 
      string filePath = "C:\\Users\\User\\Desktop\\project2\\" + "filename.csv"; 
      if (!File.Exists(filePath)) 
      { 
       File.Create(filePath).Close(); 
      } 
      string delimiter = ","; 
      string[][] output = new string[][]{ 
       new string[]{this.labels} 
      }; 
      int length = output.GetLength(0); 
      StringBuilder sb = new StringBuilder(); 
      for (int index = 0; index < length; index++) 
       sb.AppendLine(string.Join(delimiter, output[index])); 
      File.AppendAllText(filePath, sb.ToString()); 
     } 

正如你看到的,我已經使用new string[] {this.labels} 其中this.labels是CSV格式化字符串

一切工作正常,但問題是,我不知道誰寫this.values到同一個csv文件。

其中this.valuescsv格式字符串。

+0

嗯?當然你只需在進入循環之前寫下標籤...... p.s.嘗試使用StyleCop –

+0

不知道你爲什麼使用輸出數組。你能直接將'this.labels'和'this.values'直接添加到StringBuilder中嗎?或者甚至直接寫入文件,而不使用StringBuilder? –

+0

Pau:我試着做一個循環,但只是在csv文件上打印的最後一個值 –

回答

2

之前。

注意你正在做的是在StringBuilder對象中創建文本行,然後將它們一次寫入一個文件,另一個常見的替代方法是單獨編寫每行。

如果您需要顯示並編寫它,StringBuilder方法會很有用,但是如果您開始處理大量文本,請注意,因爲StringBuilder對象也會增長。

每行寫那麼下面應該幫助你開始:

using(StreamWriter sw = new StreamWriter(@"C:\temp\csvfile.csv",true)) 
      { 
       sw.WriteLine("HEADER"); 
       sw.WriteLine("======"); 
       sw.WriteLine("1,2,3,4"); 
      } 
+0

很好解釋。 – ben

+0

請注意,StreamWriter構造函數的'true'參數將導致它附加到現有文件,這將導致多個標題行。使用'false'替換任何現有文件的全部內容。 –

0

如果this.labelsthis.values已經CSV格式的字符串,那麼你可以簡單地將它們添加到文件:將File.AppendAllText添加sb.AppendLine(this.values)

using (StreamWriter w = File.AppendText("filename.csv")) 
{ 
    w.WriteLine(this.labels); 
    w.WriteLine(this.values); 
} 
相關問題