在CSV解析时跳过空行

我目前正在从URL中提取CSV文件并修改其条目。 我目前正在使用StreamReader读取CSV的每一行并将其拆分为一个数组,我可以根据其位置修改每个条目。

CSV是从电子表单提供程序生成的,其中特定表单条目是多行字段,用户可以在其中添加多个备注。 但是,当用户输入新笔记时,他们会通过换行符分隔每个笔记。

CSV示例:

"FName","LName","Email","Note 1: some text Note 2: some text" 

由于我的代码逐行拆分每个CSV条目,一旦它到达这些条目,它就会认为它是一个新的CSV条目。 这导致我的代码修改条目不起作用,因为元素位置变得不正确。 (带有空行或单行注释字段的CSV条目工作正常)

关于采取最佳方法的任何想法? 我已经尝试添加代码来替换回车或跳过空行但它似乎没有帮助。

您可以检查行中的第一列值是否为null。 如果为null则继续读取下一行。

假设您提供的CSV示例应该只是CSV文件中的一个条目(最后一个字段由于换行符而跨越几个不同的行),您可以尝试使用2个循环。

  1. 保留当前CSV记录( String[]类型) currentRecordrecordList (列表或数组)的recordList以保留所有CSV记录。
  2. 读取CSV文件的一行
  3. 使用逗号作为分隔符将其拆分为字符串数组。 将此数组保存在临时变量中。
  4. 如果此数组的大小为1,则将此字符串追加到currentRecord的最后一个元素(4th)(如果currentRecord不为null)。
  5. 继续读取CSV文件中的行,并重复步骤4直到数组大小为4。
  6. 如果大小为4,则表示该记录是CSV文件中的下recordList记录,您可以将currentRecord添加到recordList
  7. 继续重复步骤2到6,直到到达CSV文件的末尾

如果您可以在解析之前删除字段中的换行符并清理CSV文件会更好。 它会让事情变得更简单。

使用适当的CSV库来处理写入和解析。 这里有一些边缘情况需要处理,而不仅仅是新线。 用户还可以在他们的笔记中插入逗号或引号,自己处理这个会变得非常混乱。

尝试使用uniVocity解析器,因为它可以在解析和编写CSV时处理各种情况。

披露:我是这个图书馆的作者。 它是开源和免费的(Apache V2.0许可证)。