我正在开发一个 C# 程序,以便在使用 SSIS 包导入之前确定多个包含 100,000 多行的大型文本文件中每一行的行长。在使用 SSIS 将它们导入我的数据库之前,我还将检查每一行的其他值以验证它们是否正确。
例如,我希望一行长度为 3000 个字符,然后是 3001 处的 CR 和 3002 处的 LF,因此总共有 3002 个字符。
当使用 ReadLine() 时,它读取 CR 或 LF 作为行尾,这样我就无法检查 CR 或 LF 字符。我一直在检查 3000 处的线的长度以确定长度是否正确。我刚刚遇到一个问题,文件在位置 3001 处有一个 LF,但缺少 CR。所以 ReadLine() 说它是 3000 个字符女巫是正确的,但它在我的 SSIS 包中会失败,因为它缺少 CR。
我已经验证 Read() 一次会到达每个字符 1,并且我可以确定每一行是否都有 CR 和 LF,但这似乎效率不高,而且当我遇到的某些文件超过 5,000,000 行时这看起来效率很低。然后,我还需要将每个字符添加到一个字符串中,或者使用 ReadBlock() 并将一个字符数组转换为一个字符串,以便我可以检查该行中的其他值。
有没有人想过一种有效的方法来检查给定线上的 CR 和 LF 以及其他值,而不浪费不必要的资源,并以相对及时的方式完成。
最佳答案
have verified that Read() will reach each char 1 at a time and I can determine if each line has a CR and LF but this seems rather unproductive
想想这个。您是否认为 ReadLine()
有魔杖,不必读取每个字符?
只需创建您自己的 ReadMyLine()。有些东西必须读取字符,不管那是你的代码还是库。 I/O 将由 Stream 和 Windows 缓冲。
关于c# - ReadLine() 与 Read() 有效获取 CR 和 LF?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7276997/