C#中的StreamReader类是读取数据的最佳选择吗?

时间:2011-03-29 19:26:49

标签: c# streamreader

我需要读取一个范围从8k到5MB的文本文件。该文件由单行文本组成。没有回车或行结束。然后我需要把它分解成各个部分。这些作品是按大小划分的。例如,第一个信息夹由240个字符组成。在那240个字符中,前30个是名称字段。接下来的35个是地址,依此类推。解析一下,StreamReader类是将其读入内存的最佳选择吗?

2 个答案:

答案 0 :(得分:5)

查看TextFieldParser类,但在Microsoft.VisualBasic.FileIO命名空间中,它可以很容易地与C#一起使用。

MSDN上的类描述是:

  

提供解析结构化文本文件的方法和属性。

示例用法是:

using(var tfp = new TextFieldParser("path to text file"))
{
    tfp.TextFieldType = FieldType.FixedWidth;
    tfp.FieldWidths = new int[] {5, 10, 11, -1};
}

答案 1 :(得分:0)

我非常建议使用StreamReader,而不是因为堆效率的原因将所有文本读入字符串。我在2Mb的字符串上遇到了很多麻烦而不费力(在32位.NET上)。

您需要进一步的指导吗?在我看来,你可能正在寻找治疗流的帮助。程序员通常在处理字符串方面拥有更多经验,因此更喜欢串行解决方案。

如果你粘贴一些关于数据结构的更多规范,我可以帮你解决一下。现在,只需一个通用指针:

所有通用解析器和词法分析器都使用流输入模型。例如查看Coco / C#以获得一个简单易用的解析器生成器。