我不知道为什么在最后一个csv行中最后4列被切断
如果我简要介绍一下这个过程,也许这会有所帮助。
最初,应用程序读入一个csv,它在ListView中输出。可以选择单个ListItems。对于每个项目,可以停止带有日期的时间,然后将这些时间写入csv。这适用于我覆盖整个csv。
重新启动应用后,仅显示"未处理的异常"因为被覆盖的csv不再与原始csv匹配。 所有记录都是正常的,除了最后一个,并且有最后4个值:
_Dum "+", "+" _Vo "+", "+" _Bi "+", "+" _Da "
builder.AppendLine( "_Dum" + "," + "_Vo" + "," + "_Bi" + "," + "_Da" + "\r");
//Add Data
foreach (var data in varModule.List)
{
builder.AppendLine( data._Dum + ",");
if (data._Stu == "B" || data._Stu == "E")
{
builder.AppendLine(data._Vo + "," + data._Bi + "," + data._Dau);
};
//Line Break
builder.AppendLine("\r\n\n");
}
using (StreamWriter sw = new StreamWriter(csvFilePath))
{
sw.WriteLine(builder);
sw.Flush();
}
注意:如果我没有\r\n\n
和双||
,那么最后的csv行会被删除。
答案 0 :(得分:0)
您的程序似乎没有写入您需要的数据。您可能期望以下输出
_Dum,_Vo,_Bi,_Da<NewLine>
<ValueOf_Dum>,<ValueOf_Vo>,<ValueOf_Bi>,<ValueOf_Da><NewLine>
请注意,我特意将<NewLine>
添加到输出中。 <NewLine>
代表换行符,取决于您的操作系统是"\n"
(在Unix系统上)或"\r\n"
(在Windows系统上)。在.NET中还有Environment.NewLine
,它返回特定于平台的新行字符。请注意,没有CSV“标准”,因此您可以选择要使用的新行字符。看来你不清楚这一点,所以你首先必须做出这个决定。
您需要考虑的下一件事是StringBuilder.Append
和StringBuilder.AppendLine
之间的区别。 Append
只是在字符串末尾添加指定的文字,而AppendLine
添加文字,后跟Environment.NewLine
返回的字符。
在您的代码中,您始终使用AppendLine
,这可能不是您想要的,因为您显然想构建行并将它们作为一个整体添加。按照这种方式,您可以在某些值之间一致地添加换行符,CSV表示新记录的开头。
您不仅无意中将新行字符添加到文件中,而且您手动添加的新行字符也不一致。在标题行中,您使用"\r"
(在Unix中和在Windows中不正常)。稍后您使用"\r\n\n"
(甚至后跟AppendLine
添加的新行),这在Unix中不起作用(因为开始时为"\r"
)或在Windows中(因为最后没有前面"\n"
的{{1}}。
您的下一个问题是代码的这一部分:
"\r"
当if (data._Stu == "B" || data._Stu == "E")
{
builder.AppendLine(data._Vo + "," + data._Bi + "," + data._Dau);
};
为_Vo
或_Bi
时,您正在为_Dau
,_Stu
和"B"
添加值。当"E"
有任何其他价值时你会怎么做?没有!这意味着您在那里生成一个不完整的记录,这是您描述的问题的最可能原因。您需要决定在else案例中应该发生什么,并将其合并到您的程序中。
通常,您似乎无法完全了解程序的预期流程,CSV格式以及您在代码中使用的说明。要解决您的问题,您需要执行以下步骤:
_Stu
,"\r\n"
或"\n"
),并在整个程序中始终如一地使用它。Environment.NewLine
只想添加文字,Append
如果希望添加的文字后跟AppendLine
。Environment.NewLine
不是Stu
或"B"
时应该发生的事情,并将此案例添加到您的计划中。