Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# CSV打印问题_C#_.net_Csv_Streamwriter - Fatal编程技术网

C# CSV打印问题

C# CSV打印问题,c#,.net,csv,streamwriter,C#,.net,Csv,Streamwriter,我有一个程序,可以写入csv两列。一个是比率,形式为1:100,或类似的东西,另一个是分数 这些值存储在字典中,并按如下方式打印: foreach (String s in p.normalizedScore.Keys) { sw.WriteLine(s + DELIM + p.normalizedScore[s]); } 其中sw是StreamWriter,DELIM是逗号。产出如下: foreach (String s in p.normalizedScore.Keys) {

我有一个程序,可以写入csv两列。一个是比率,形式为1:100,或类似的东西,另一个是分数

这些值存储在字典中,并按如下方式打印:

foreach (String s in p.normalizedScore.Keys)
{
       sw.WriteLine(s + DELIM + p.normalizedScore[s]);
}
其中sw是StreamWriter,DELIM是逗号。产出如下:

foreach (String s in p.normalizedScore.Keys)
{
       sw.WriteLine(s + DELIM + p.normalizedScore[s]);
}
1:10,7.498378506

0.11111118.46320676

0.736111111,30.08283816

1:10000,40.80688802

1:100000,51.93716854

1:1000000,62.89993635

1:10000000,73.54010349

分数都是正确的,但有2个比率打印不正确(应该增加10倍,所以应该有1:100和1:1000)。当我进入调试器时,我发现在打印时,它仍然正确读取所有比率,这意味着我无法在代码中找到任何比率错误的地方。有人知道问题出在哪里吗


编辑:上面的输出是直接从Excel复制的,但如果我在记事本中查看,数据似乎很好,所以我觉得问题出在Excel上。(仍然不知道你在想什么。)

根据评论-这是Excel格式问题,而不是代码问题

将Cory的评论添加到答案中,因为我认为它增加了重要的价值:


如果你在你的比率周围加上引号,Excel不应该尝试任何有趣的事情 与格式有关的业务(您不会在Excel中看到报价单, 这只是CSV规范的一部分,用于限定您的值)


不要只是双击文件并在excel中打开。打开新工作表并从文本文件导入。然后,您将指定它是一列文本,或者您可以使用文本限定符创建csv,并在导入中使用它

或者,您可以在
s
变量前面添加空格

sw.WriteLine(" "+ s + DELIM + p.normalizedScore[s]);  

“1:10”不会被视为表达式。

发布您的代码。我指的是生成
字典的代码
。生成
p.normalizedScore.Keys
的代码在哪里?旁注:我不会使用逗号作为分隔符将双精度写入文件(世界上一半的国家使用逗号作为十进制分隔符)。这是直接从csv文件(通过记事本)获得的输出吗,还是从Excel复制的?@Dan-o:你提出了一个很好的观点。我刚刚从Excel中复制了它,但现在在记事本中查看它似乎很好。因此,Excel有一个问题。如果在比率周围加引号,Excel不应该尝试任何有趣的格式化操作(在Excel中看不到引号,这只是CSV规范中用于限定值的一部分)。这确实有效,然而,我仍然不知道打印不正确的2和其他打印不正确的2之间有什么区别。1:1000被自动转换为时间。1小时1000分钟,然后以十进制形式输出。(如果将单元格0.736111重新格式化为时间,则将为17小时40分钟)