C#讀取一定規則的TXT文本文件時,可以一次性讀入內存中再來轉換成需要的格式,但有些文件太大,並不能使用StreamReader函數一次性讀取,一次性讀取方式:
using (System.IO.StreamReader sr = new System.IO.StreamReader(path, Encoding.Default))//
{
lines = sr.ReadToEnd().Split(split1, StringSplitOptions.RemoveEmptyEntries);//
}
之前寫的原文鏈接:https://blog.csdn.net/yewuzhitou/article/details/95300593
文件一行一行存儲在string[] lines中,這次記錄一種可以讀取大文件的方法——多行逐步讀取txt文本文件。
public static void ReadBigFile(string filePath,out List<point> l,int LineNum=1000000)
{
Encoding _encoding = Encoding.Default;
l = new List<point>();
char[] split = new char[] { ' ', ';', };
int sumLineNum = 0;
while (true)
{
try
{
var lines = File.ReadLines(filePath, _encoding).Skip(sumLineNum ).Take(LineNum);
sumLineNum += LineNum;
int i = 0;
foreach (var line in lines)
{
i = 1;
string[] items = line.Split(split);
{
try
{
pointa = new point();
if (items.Length == 4)
{
a.X = Convert.ToDouble(items[0]);
a.Y = Convert.ToDouble(items[1]);
a.Z = Convert.ToDouble(items[2]);
a.Color = Convert.ToByte(items[3]);
}
else if (items.Length == 3)
{
a.X = Convert.ToDouble(items[0]);
a.Y = Convert.ToDouble(items[1]);
a.Z = Convert.ToDouble(items[2]);
}
else if (items.Length == 2)
{
a.X = Convert.ToDouble(items[0]);
a.Y = Convert.ToDouble(items[1]);
}
l.Add(a);
}
catch { }
}
}
if (i == 0) break;
}
catch { break; }
}
}
這裏點雲數據的格式如下:
public class point{
public double X{get;set;}
public double Y{get;set;}
public double Z{get;set;}
public byte Color{get;set;}
}
通過設置每次讀取的行數LineNum實現對大文件格式txt文本的讀寫,設置的LineNum大寫讀取次數較少相對讀取較快,而且LineNum大於文件的行數也不會報錯,因此這裏設置一次標記 i 來跳出循環。
2020年5月25日小記 星期一