在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个不同的列中。 我的function正常工作,因为它没有看到标签(“\ 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”也没有帮助。

首先,您说您正在写入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(); 

我倾向于同意@Hossein。 我认为这是一个编码问题。 我完全按照我的机器运行你的代码,它运行得很好。

如果您在一年前写完这个问题后仍然没有找到解决方案:

您可以使用非常受欢迎的KBCSV库,它可以处理您需要的所有内容。 它默认使用csv,但可以很容易地修改以处理tsv。

对于一个非常简单易破解的解决方案,您可以尝试:string.Join(“\ t”,rzad)+“\ r \ n”

这不会考虑包含选项卡的字段。 如果字段包含选项卡,则会使此方法无效。 通常,包含分隔符的字段是双引号,包含双引号的字段是双引号。

实现这一点并不困难,但它会重新发明轮子,因为Kent Boogart已经花了很多时间考虑了一些我不会注意到的边缘情况。

以下函数用于编写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");