C# 最后一排被切断
我不知道为什么在最后的csv行中,最后4列被切断 如果我简单描述一下这个过程,也许会有所帮助 最初,应用程序读取csv,并在ListView中输出。可以选择各个列表项。对于每个项目,可以停止带有日期的时间,然后应将这些时间写入csv。在这种情况下,我覆盖了整个csv 重新启动应用程序后,仅显示“未处理的异常”,因为覆盖的csv不再与原始csv匹配。 除最后一个记录外,所有记录均正常,并且有最后4个值:C# 最后一排被切断,c#,csv,xamarin.android,C#,Csv,Xamarin.android,我不知道为什么在最后的csv行中,最后4列被切断 如果我简单描述一下这个过程,也许会有所帮助 最初,应用程序读取csv,并在ListView中输出。可以选择各个列表项。对于每个项目,可以停止带有日期的时间,然后应将这些时间写入csv。在这种情况下,我覆盖了整个csv 重新启动应用程序后,仅显示“未处理的异常”,因为覆盖的csv不再与原始csv匹配。 除最后一个记录外,所有记录均正常,并且有最后4个值: \u Dum“+”、“+”Vo“+”、“+”Bi“+”、“+”Da” 注意:如果我不使用wir
\u Dum“+”、“+”Vo“+”、“+”Bi“+”、“+”Da”
注意:如果我不使用wirte
\r\n\n
和double|
的话,最后一行csv将被提前剪切。您的程序似乎没有写入您需要的数据。您可能希望得到以下输出
\u Dum、\u Vo、\u Bi、\u Da
,,
请注意,我特别在输出中添加了
。
代表换行符,根据您的操作系统,换行符可以是“\n”
(在Unix系统上)或“\r\n”
(在Windows系统上).NET中还有Environment.NewLine
,它返回特定于平台的新行字符。请注意,没有CSV“标准”,因此您可以选择要使用的新行字符。您似乎对此不清楚,因此首先必须做出决定
<> >您必须考虑的是:<代码> StringBuilder。AppEng/Apple >和<代码> StringBuilder。AppDetry .<代码> AppEng/Up> >在字符串末尾添加指定的文本,而<代码> AppDetry添加文本,后面跟着“<代码>环境”返回的字符。
在代码中,您始终使用AppendLine
,这不是您想要的,因为您显然希望构造行并将它们作为一个整体添加。这样做的方式是,您始终在一些值之间添加新行字符,这在CSV中意味着新记录的开始
您不仅无意中向文件中添加了新行字符,而且手动添加的新行字符也不一致。在标题行中,您使用了“\r”
(在Unix和Windows中这是不正确的)。之后,您使用了“\r\n\n”
(甚至在新行后面添加了附录行
),在Unix中(由于开头的“\r”
)或在Windows中(由于结尾的“\n”
没有前面的“\r”
)工作不好
下一个问题是代码的这一部分:
if (data._Stu == "B" || data._Stu == "E")
{
builder.AppendLine(data._Vo + "," + data._Bi + "," + data._Dau);
};
当\u Stu
为“B”
或“E”时,您正在添加\u Vo
、\u Bi
和\u Dau
的值“
。当\u Stu
有任何其他值时,您会怎么做?没有什么!这意味着您在那里生成了一个不完整的记录,这很可能是您描述的问题的原因。你需要决定在else情况下应该发生什么,并将其纳入你的计划中
一般来说,您似乎不完全清楚程序的预期流程、CSV格式以及您在代码中使用的指令。要解决问题,您需要执行以下步骤:
“\r\n”
、“\n”
或环境。新行
)并在整个程序中一致使用Append
,在添加的文本后面跟着Environment.NewLine
时使用AppendLine
Stu
不是“B”
或“E”
时应发生的情况,并将此案例添加到程序中你的马车返程,新线方式似乎有点不对劲。您能描述一下为什么要在第1行的
附录行中添加“\r”
,以及为什么要编写附录行(“\r\n\n”)
?如果这只是一个似乎在为您解决某些问题,但没有遵循文档中的问题/解决方案的解决方法,那么如果我们不先解决这个问题,我们最终会刮胡子。要扩展到@grek40所说的内容,如果您想自己编写换行符,请使用builder.Append()
而不是builder.AppendLine()
。
if (data._Stu == "B" || data._Stu == "E")
{
builder.AppendLine(data._Vo + "," + data._Bi + "," + data._Dau);
};