代码之家  ›  专栏  ›  技术社区  ›  Ondrej Slinták

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

  •  3
  • Ondrej Slinták  · 技术社区  · 14 年前

    我有以下文本文件:

    37 44 60
    67 15 94
    45 02 44
    

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

    3 回复  |  直到 8 年前
        1
  •  11
  •   Tom palehorse    8 年前
    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及更高版本中。

        2
  •  5
  •   Thomas Levesque    14 年前

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

    public static class TextReaderExtensions
    {
        public static IEnumerable<string> Lines(this TextReader reader)
        {
            string line;
            while((line = reader.ReadLine()) != null) yield return line;
        }
    }
    
        3
  •  2
  •   Jonathan    14 年前

    你的意思是这样的吗?

    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