我需要处理一个大文件,大约400K行,200M,但有时我必须从下往上处理。如何在这里使用迭代器( here return)?基本上,我不喜欢将所有内容都加载到内存中。我知道在.NET中使用迭代器更有效。
发布于 2009-01-17 07:27:30
要创建文件迭代器,您可以执行以下操作:
编辑:
这是我固定宽度的反向文件阅读器的固定版本:
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);
}
发布于 2010-12-26 22:35:01
我将文件逐行放入列表中,然后使用List.Reverse();
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)
{
..。
发布于 2009-01-17 07:41:00
您可以向后一次读取文件中的一个字符,并缓存所有字符,直到到达回车符和/或换行符。
然后反转收集到的字符串,并将其作为一条线进行yeld。
https://stackoverflow.com/questions/452902
复制相似问题