在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");