将数据保存在 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”也没有帮助。
I have a problem to save data in .csv file.
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();
}
The problem is tak in file I have data in A column. I want to smash one row in DataRow format to 8 parts, which are put in 8 different columns. My function working as it doesn't see the tab ("\t").
I cant post images so I try to describe results in csv file:
2011-03-17 14:34:11asdPrzekroczono krytyczną minimalną wymaganą wartość parametru5010050080550
This is my example row and I want to smash it to 8 columns:
2011-03-17 14:34:11 asd Przekroczono krytyczną minimalną wymaganą wartość parametru 50 100 500 80 550
"#\t#" doesn't help. The results is:
"2011-03-17 18:29:17# #asd# #Przekroczono krytyczną, maksymalną, wymaganą wartość parametru# #560# #100# #500# #80# #550# #"
There is some tabulation but my point is that was made no space but a transition to the next cell :(
"\u0008" also doesn't help.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
首先,您说您正在写入 CSV(逗号分隔值)文件。
但是,您实际上正在写入一个制表符分隔的文件。
并且,您需要在行之间写 /r/n:
这有效:
First, you say you are writing to a CSV (comma seperated values) file.
But, you are really writing to a tab-delimited file.
And, you need to write /r/n between lines:
This works:
我倾向于同意@Hossein。我认为这是一个编码问题。我运行了你的代码,就像在我的机器上一样,它运行得很好。
I'm inclined to agree @Hossein. I think it's an encoding issue. I ran your code exactly as it is on my machine, and it worked perfectly.
以防万一您自从一年前写下这个问题以来仍然没有找到解决方案:
您可以使用 KBCSV 库,它非常流行并且可以处理几乎您需要的所有内容。它默认使用 csv,但可以轻松修改以处理 tsv。
对于一个非常简单且容易破坏的解决方案,您可以尝试:
string.Join("\t", rzad) + "\r\n"
这不会考虑包含制表符的字段。如果字段包含制表符,则此方法将无用。通常,包含分隔符的字段是双引号的,而包含双引号的字段是双双引号的。
实现这一点并不太困难,但它会重新发明轮子,因为 Kent Boogart 已经花了很多时间考虑一些我不会意识到的边缘情况。
Just in case you still haven't found a solution since you wrote this question a year ago:
You can use the KBCSV library which is very popular and handles pretty much everything you require. It uses csv by default but can be easily modified to handle tsv.
For a very simple and easily breakable solution you can try:
string.Join("\t", rzad) + "\r\n"
This wouldn't take into account fields that contain tabs. If a field contains a tab, it will make this method useless. Typically fields that would contain the delimiter are double quoted and fields that contain double quotes would be double double quoted.
It's not too difficult to implement this, but it would be reinventing the wheel as it has Kent Boogart has already spent many hours taking into consideration a few of the edge cases that I would not be aware of.
以下函数用于写入 csv 文件。
然后通过另一个简单的多行示例调用此函数
,每行由换行符“\n”分隔。
The following function is used to write the csv file.
Then call this function by
Another simple example for multiple rows, each row is separated by a new line character '\n'.