[.NET]大檔案的 Replace, Split 方式 - 2

在前一篇「[.NET]大檔案的 Replace, Split 方式」裡面,

有一段是將字串中的 "-" Replace 成 空字串,

原本的內容中並沒有 "-" 呀~~ 

因為我們將整個檔案讀到 ByteArray 之中,

然後再透過 BitConverter.ToString 時,會將每個 Byte 中間用 "-" 去串接。

所以我們可以參考「Convert Stream to IEnumerable. If possible when “keeping laziness”

從 FileStream 中順序地將一個 Byte 一個 Byte 讀出來處理,

就不用多處理那個 Replace 的問題了。

所以原有的 Split2 Method 調整成直接處理 Stream ,就可以了,如下,

static void Main(string[] args)
{
	string bigFile = @"很大的檔案";
	var file = new FileStream(bigFile, FileMode.Open);
	//讀取全部的資料
	//var lines = StreamWithSplitEnumerable(file, "0D0A");
	//讀取前5筆資料
	var lines = StreamWithSplitEnumerable(file, "0D0A").Take(5);
	foreach (string s in lines)
		Console.WriteLine(s);
	Console.ReadKey();
}
	
public static IEnumerable<string> StreamWithSplitEnumerable(Stream stream, string splitStr)
{
	if (stream == null)
		yield break;
	string line = string.Empty;
	for (int i = stream.ReadByte(); i != -1; i = stream.ReadByte())
	{
		var bs = i.ToString("X2");
		line += bs;
		if (line.EndsWith(splitStr))
		{
			var returnValue = line.Substring(0, line.Length - splitStr.Length);
			yield return returnValue;
			Console.WriteLine(returnValue);
			line = string.Empty;
		}
	}
}

參考資料

[.NET]大檔案的 Replace, Split 方式

Convert Stream to IEnumerable. If possible when “keeping laziness”

Hi, 

亂馬客Blog已移到了 「亂馬客​ : Re:從零開始的軟體開發生活

請大家繼續支持 ^_^