【发布时间】:2008-11-21 12:29:06
【问题描述】:
如果我在任何时候错了,请随时纠正我......
我正在尝试使用 .NET 文件 I/O 类读取 CSV(逗号分隔值)文件。现在的问题是,这个 CSV 文件可能在某些字段和标准文本模式中包含一些带有软回车的字段(即单独的 \r 或 \n 标记,而不是文本文件中用于结束一行的标准 \r\n) I/O 类 StreamReader 不遵守标准约定,将软回车视为硬回车,从而损害 CSV 文件的完整性。
现在使用 BinaryReader 类似乎是唯一的选择,但 BinaryReader 没有 ReadLine() 函数,因此需要我自己实现 ReadLine()。
我当前的方法一次从流中读取一个字符并填充 StringBuilder 直到获得 \r\n(忽略所有其他字符,包括单独的 \r 或 \n),然后返回 StringBuilder 的字符串表示(使用 ToString())。
但我想知道:这是实现 ReadLine() 函数的最有效方式吗?请赐教。
【问题讨论】:
-
当您说“标准约定”时,您应该意识到它并不是特别标准。在 Unix 上,"\n" 是正常的行终止符,它自己。
-
您真的有性能问题还是这是过早优化的典型案例? ;)。我没看到你提到性能问题
-
@Jon - 是的,我知道,谢谢。我的意思是窗口/dos 的标准。
-
@Pop Catalin - 我没有做过任何真正的性能测试,但是当我看到这个问题时我有点沮丧。我希望 StreamReader 能够工作。我担心自定义实现是否足够好。