使用LINQ从文件中读取文本数据

时间:2010-02-18 16:34:02

标签: c# linq text

我有以下文字文件:

37 44 60
67 15 94
45 02 44

如何使用LINQ读取此文件中的所有数字并将其保存为二维数组?我要做的就是创建一个包含每行中所有第一个值的简单数组。在这种情况下使用LINQ是一个好主意还是我应该简单地加载文件并解析它?

3 个答案:

答案 0 :(得分:11)

File.ReadAllLines(myFile)
    .Select(l => l.Split(' ').Select(int.Parse).ToArray()).ToArray();

或者:

List<int[]> forThoseWhoHave1GigFiles = new List<int[]>();
using(StreamReader reader = File.OpenText(myFile))
{
    while(!reader.EndOfStream)
    {
        string line = reader.ReadLine();
        forThoseWhoHave1GigFiles.Add(line.Split(' ')
            .Select(int.Parse).ToArray());
    }
}
var myArray = forThoseWhoHave1GigFiles.ToArray();

File.ReadLines(myFile)
    .Select(l => l.Split(' ')
    .Select(int.Parse).ToArray())
    .ToArray();

在.Net 4.0及以上版本中。

答案 1 :(得分:5)

只是为了完成Jonathan的回答,以下是如何实现Lines扩展方法:

public static class TextReaderExtensions
{
    public static IEnumerable<string> Lines(this TextReader reader)
    {
        string line;
        while((line = reader.ReadLine()) != null) yield return line;
    }
}

答案 2 :(得分:2)

你的意思是这样吗?

StreamReader sr = new StreamReader("./files/someFile.txt");

      var t1 =
        from line in sr.Lines()
        let items = line.Split(' ')
        where ! line.StartsWith("#")
        select String.Format("{0}{1}{2}",
            items[1],
            items[2],
            items[3]);

查看此网址:LINK