首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在C#中使用迭代器反向读取文本文件

如何在C#中使用迭代器反向读取文本文件
EN

Stack Overflow用户
提问于 2009-01-17 06:27:54
回答 6查看 61.2K关注 0票数 92

我需要处理一个大文件,大约400K行,200M,但有时我必须从下往上处理。如何在这里使用迭代器( here return)?基本上,我不喜欢将所有内容都加载到内存中。我知道在.NET中使用迭代器更有效。

EN

回答 6

Stack Overflow用户

发布于 2009-01-17 07:27:30

要创建文件迭代器,您可以执行以下操作:

编辑:

这是我固定宽度的反向文件阅读器的固定版本:

代码语言:javascript
复制
public static IEnumerable<string> readFile()
{
    using (FileStream reader = new FileStream(@"c:\test.txt",FileMode.Open,FileAccess.Read))
    {
        int i=0;
        StringBuilder lineBuffer = new StringBuilder();
        int byteRead;
        while (-i < reader.Length)
        {
            reader.Seek(--i, SeekOrigin.End);
            byteRead = reader.ReadByte();
            if (byteRead == 10 && lineBuffer.Length > 0)
            {
                yield return Reverse(lineBuffer.ToString());
                lineBuffer.Remove(0, lineBuffer.Length);
            }
            lineBuffer.Append((char)byteRead);
        }
        yield return Reverse(lineBuffer.ToString());
        reader.Close();
    }
}

public static string Reverse(string str)
{
    char[] arr = new char[str.Length];
    for (int i = 0; i < str.Length; i++)
        arr[i] = str[str.Length - 1 - i];
    return new string(arr);
}
票数 3
EN

Stack Overflow用户

发布于 2010-12-26 22:35:01

我将文件逐行放入列表中,然后使用List.Reverse();

代码语言:javascript
复制
        StreamReader objReader = new StreamReader(filename);
        string sLine = "";
        ArrayList arrText = new ArrayList();

        while (sLine != null)
        {
            sLine = objReader.ReadLine();
            if (sLine != null)
                arrText.Add(sLine);
        }
        objReader.Close();


        arrText.Reverse();

        foreach (string sOutput in arrText)
        {

..。

票数 2
EN

Stack Overflow用户

发布于 2009-01-17 07:41:00

您可以向后一次读取文件中的一个字符,并缓存所有字符,直到到达回车符和/或换行符。

然后反转收集到的字符串,并将其作为一条线进行yeld。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/452902

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档