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

时间:2015-01-14 21:25:43

标签: c# xna

我有一些看起来类似于下面的文本文件:

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循环因为我不知道textfile有多少行,是否可以用另一个循环加载它?或者是不可能用一个循环加载整个文本文件?

2 个答案:

答案 0 :(得分:4)

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();

答案 1 :(得分:0)

请注意,可以运行for循环而无需明确知道要迭代的元素数量 - 中心语句可以任何条件评估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)
{
    //...
}