将数据保存在csv文件中
我在保存.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”也于事无补
首先,你说你正在编写一个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();
它不起作用:( – piwowarczyk85 2011-03-18 09:06:35
我倾向于同意@Hossein。我认为这是一个编码问题。我完全按照它在我的机器上运行你的代码,它完美地工作。
那么它应该怎么样? – piwowarczyk85 2011-03-18 08:42:22
不幸的是,我不能帮你,我不必处理任何编码问题,我工作。对不起。 – 2011-03-18 13:27:31
万一你还没有找到一个解决方案,因为你一年前写了这个问题:
可以使用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");
您能告诉我们输出是什么吗? – 2011-03-17 16:49:17
还有一段完整的可运行代码。由于你的功能似乎正确。 – Hossein 2011-03-17 16:52:14
这可能是一个编码问题。尝试** sw.Write(“\ u0008”)**,看看它是否工作。如果不是,请尝试将** sw.Write(“\ t”)**更改为** sw.Write(“#\ t#”)**并查看它是否写入#s? – Hossein 2011-03-17 17:20:14