在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个循环。
- 保留当前CSV记录(
String[]
类型)currentRecord
和recordList
(列表或数组)的recordList
以保留所有CSV记录。 - 读取CSV文件的一行
- 使用逗号作为分隔符将其拆分为字符串数组。 将此数组保存在临时变量中。
- 如果此数组的大小为1,则将此字符串追加到
currentRecord
的最后一个元素(4th)(如果currentRecord
不为null)。 - 继续读取CSV文件中的行,并重复步骤4直到数组大小为4。
- 如果大小为4,则表示该记录是CSV文件中的下
recordList
记录,您可以将currentRecord
添加到recordList
- 继续重复步骤2到6,直到到达CSV文件的末尾
如果您可以在解析之前删除字段中的换行符并清理CSV文件会更好。 它会让事情变得更简单。
使用适当的CSV库来处理写入和解析。 这里有一些边缘情况需要处理,而不仅仅是新线。 用户还可以在他们的笔记中插入逗号或引号,自己处理这个会变得非常混乱。
尝试使用uniVocity解析器,因为它可以在解析和编写CSV时处理各种情况。
披露:我是这个图书馆的作者。 它是开源和免费的(Apache V2.0许可证)。