如何加载包含多行的文本文件?

How can I load a textfile with many rows?

我有一些文本文件类似于以下文件:

0,75;1,20;true;4,50;4,30;3,30;false
0,75;1,20;true;4,50;4,30;4,30;true

我这样加载文本文件:

private const string filename = "Data.txt";
string[] strs;
public void LoadTextfile()
    {
        System.IO.Stream stream = TitleContainer.OpenStream(filename);
        System.IO.StreamReader reader = new System.IO.StreamReader(stream);       
        strs = reader.ReadLine().Split(';');
        game1.StatsList.Add(new Containerclass.StatsContainer(float.Parse(strs[0], culture), float.Parse(strs[1], culture), bool.Parse(strs[2]), float.Parse(strs[3], culture), float.Parse(strs[4], culture), float.Parse(strs[5], culture), bool.Parse(strs[6])));        
        strs = reader.ReadLine().Split(';');
        game1.StatsList.Add(new Containerclass.StatsContainer(float.Parse(strs[0], culture), float.Parse(strs[1], culture), bool.Parse(strs[2]), float.Parse(strs[3], culture), float.Parse(strs[4], culture), float.Parse(strs[5], culture), bool.Parse(strs[6])));        

但是我的文本文件比上面的文本文件有更多的条目(超过 100 个)。此外,我不知道任何文本文件的行数。也许一个文本文件有 110 行,第二个文本文件有 150 行,等等。 如果我不知道行数,是否可以通过循环加载所有内容?我应该使用哪个循环来加载整个文本文件?我知道我不能使用 for 循环,因为我不知道文本文件有多少行,是否可以用另一个循环加载它?还是不能用一个循环加载整个文本文件?

File.ReadLines(string path)真不错

string[] lines = File.ReadLines("filename.txt").ToArray();

如果你实在想花哨,可以试试linq

game1.StatsList = File.ReadLines("Data.txt")
    .Select(s => 
    {
        var strs = s.Split(';');
        return new Containerclass.StatsContainer(float.Parse(strs[0], culture), float.Parse(strs[1], culture), bool.Parse(strs[2]), float.Parse(strs[3], culture), float.Parse(strs[4], culture), float.Parse(strs[5], culture), bool.Parse(strs[6]));
    })
    .ToList();

请注意,for 循环可以是 运行 而无需明确知道要迭代的元素数量 - 中央语句可以是 any 条件评估bool,而不仅仅是 i < number

using (var reader = new StreamReader(stream))
{
    for(string line = reader.ReadLine();
        reader.EndOfFile == false;
        line = reader.ReadLine())
    {
        //...
    }
}

使用 File.ReadLines 还可以让您使用 foreach -

遍历每一行
foreach(string line in File.ReadLines(filename))
{
    //...
}

更明确一点,您还可以使用 StreamReader.ReadToEndSplt 结果

foreach(var line in new StreamReader(stream)
    .ReadToEnd()
    .Split(new [] {"\r\n" }, StringSplitOptions.RemoveEmptyEntries)
{
    //...
}