2011-03-17 177 views
0

我在保存.csv文件中的數據時遇到問題。將數據保存在csv文件中

 void WriteLog(DataRow rzad) 
    { 
      StreamWriter sw = new StreamWriter("log.csv", true); 
      int iColCount = 8; 

      for (int i = 0; i < iColCount; i++) 
      { 
       if (!Convert.IsDBNull(rzad[i])) 
       { 
        sw.Write(rzad[i].ToString()); 
        sw.Write("\t"); 
       } 
      } 
      sw.Write("\n"); 
      sw.Flush(); 
      sw.Close(); 
    } 

問題是德文件我在A列有數據。我想將DataRow格式的一行粉碎成8個部分,分成8個不同的列。我的功能沒有看到標籤(「\ t」)。

所以我儘量描述CSV文件的結果,我不能發表圖片:

2011-03-17 14:34:11asdPrzekroczono krytyczną minimalną wymaganą wartość parametru5010050080550 

這是我的榜樣行,我想將它粉碎到8列:

2011-03-17 14:34:11  asd  Przekroczono krytyczną minimalną wymaganą wartość parametru 50  100 500  80  550  

「#\ t#「沒有幫助。結果是:

"2011-03-17 18:29:17# #asd# #Przekroczono krytyczną, maksymalną, wymaganą wartość parametru# #560# #100# #500# #80# #550# #" 

有一些表格,但我的觀點是,有人沒有空間,但到下一個單元格:(過渡

「\ u0008」也於事無補

+1

您能告訴我們輸出是什麼嗎? – 2011-03-17 16:49:17

+0

還有一段完整的可運行代碼。由於你的功能似乎正確。 – Hossein 2011-03-17 16:52:14

+0

這可能是一個編碼問題。嘗試** sw.Write(「\ u0008」)**,看看它是否工作。如果不是,請嘗試將** sw.Write(「\ t」)**更改爲** sw.Write(「#\ t#」)**並查看它是否寫入#s? – Hossein 2011-03-17 17:20:14

回答

1

首先,你說你正在編寫一個CSV(逗號分隔值)文件 但是,你真的寫入製表符分隔文件 而且,你需要寫字裏行間/ R/N:。

這工作:

StreamWriter sw = new StreamWriter(@"c:\log.csv", true); 
    int iColCount = 8; 
    for (int i = 0; i < iColCount; i++) 
    {   
     { 
      sw.Write(i.ToString()); 
      sw.Write("\t"); 
     } 
    } 
    sw.Write("\r\n"); 
    sw.Flush(); 
    sw.Close(); 
+0

它不起作用:( – piwowarczyk85 2011-03-18 09:06:35

0

我傾向於同意@Hossein。我認爲這是一個編碼問題。我完全按照它在我的機器上運行你的代碼,它完美地工作。

+0

那麼它應該怎麼樣? – piwowarczyk85 2011-03-18 08:42:22

+0

不幸的是,我不能幫你,我不必處理任何編碼問題,我工作。對不起。 – 2011-03-18 13:27:31

0

萬一你還沒有找到一個解決方案,因爲你一年前寫了這個問題:

可以使用KBCSV庫,這是非常流行的,並處理您需要幾乎一切。它默認使用csv,但可以很容易地修改以處理tsv。

對於一個非常簡單和容易破裂的解決方案,您可以嘗試: 的string.join( 「\ t」 的,rzad)+ 「\ r \ n」 個

這不會考慮到,包含製表帳戶領域。如果一個字段包含一個選項卡,它將使此方法無用。通常情況下,將包含分隔符的字段用雙引號引起來,並且包含雙引號的字段將用雙引號引起來。

這不難實現,但它會重新發明輪子,因爲Kent Boogart已經花了很多時間考慮了一些我不知道的邊緣情況。

0

以下函數用於編寫csv文件。

public static void WriteCSV(string file, string content) 
{ 
    using (StreamWriter sw = new StreamWriter(file)) 
    { 
     sw.Write(content); 
    } 
} 

然後通過

string appendText = ""; 
for (int i = 0; i < iColCount; i++) 
{ 
    if (!Convert.IsDBNull(rzad[i])) 
    { 
     appendText += appendText == "" ? rzad[i].toString() : "," + rzad[i].toString(); 
    } 
} 
WriteCSV("C:\\out\\out.csv",appendText); 

另一簡單示例調用此函數爲多個行,每行是由一個新行字符「\ n」分離。

WriteCSV("C:\\out\\out.csv","a,b,c,d,e,f,g\nh,i,j,k,l,m,n\n");