2011-03-17 176 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");