[英]Last row cut off
我不知道为什么在最后的csv行中最后4列被切除
如果我简要描述一下过程,那可能会有所帮助。
最初,该应用读取csv,并在ListView中输出。 可以选择单个ListItem。 对于每个项目,可以停止带有日期的时间,然后将这些日期写入csv。 我覆盖整个csv的作品。
重新启动应用程序后,仅显示“未处理的异常”,因为被覆盖的csv不再与原始匹配。 所有记录都可以,除了最后一个,还有最后四个值:
_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行将被更早地删除。
您的程序似乎并未写入所需的数据。 您可能期望以下输出
_Dum,_Vo,_Bi,_Da<NewLine>
<ValueOf_Dum>,<ValueOf_Vo>,<ValueOf_Bi>,<ValueOf_Da><NewLine>
请注意,我专门在输出中添加了<NewLine>
。 <NewLine>
代表换行符,取决于您的OS是"\\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"
末尾没有"\\r"
)。
下一个问题是代码的这一部分:
if (data._Stu == "B" || data._Stu == "E")
{
builder.AppendLine(data._Vo + "," + data._Bi + "," + data._Dau);
};
当_Stu
为"B"
或"E"
时,将添加_Vo
, _Bi
和_Dau
的值。 _Stu
还有其他值时您会怎么做? 没有! 这意味着您在此处生成的记录不完整,这很可能是您描述问题的原因。 您需要下定决心,在其他情况下会发生什么,并将其合并到您的程序中。
通常,您似乎不太清楚程序的预期流程,CSV格式以及代码中所使用的指令正在执行的操作。 要解决您的问题,您需要执行以下步骤:
"\\r\\n"
, "\\n"
或Environment.NewLine
),并在整个程序中一致使用它。 Append
要添加只是文本和AppendLine
当你想跟着增加的文字Environment.NewLine
。 Stu
不是"B"
或"E"
时应该发生的情况,并将这种情况添加到程序中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.