C# 最后一排被切断

C# 最后一排被切断,c#,csv,xamarin.android,C#,Csv,Xamarin.android,我不知道为什么在最后的csv行中,最后4列被切断 如果我简单描述一下这个过程,也许会有所帮助 最初,应用程序读取csv,并在ListView中输出。可以选择各个列表项。对于每个项目,可以停止带有日期的时间,然后应将这些时间写入csv。在这种情况下,我覆盖了整个csv 重新启动应用程序后,仅显示“未处理的异常”,因为覆盖的csv不再与原始csv匹配。 除最后一个记录外,所有记录均正常,并且有最后4个值: \u Dum“+”、“+”Vo“+”、“+”Bi“+”、“+”Da” 注意:如果我不使用wir

我不知道为什么在最后的csv行中,最后4列被切断

如果我简单描述一下这个过程,也许会有所帮助

最初,应用程序读取csv,并在ListView中输出。可以选择各个列表项。对于每个项目,可以停止带有日期的时间,然后应将这些时间写入csv。在这种情况下,我覆盖了整个csv

重新启动应用程序后,仅显示“未处理的异常”,因为覆盖的csv不再与原始csv匹配。 除最后一个记录外,所有记录均正常,并且有最后4个值:

\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格式以及您在代码中使用的指令。要解决问题,您需要执行以下步骤:

  • 清楚地了解所需的输出以及生成该输出的程序的外观
  • 了解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);
    };