使用LINQ读取文本文件

4

我有一个文件,想要将其读入数组中。

string[] allLines = File.ReadAllLines(@"path to file");

我知道可以通过迭代数组并查找包含某个模式的每一行,并显示行号和行本身。

我的问题是:

是否可以使用LINQ完成同样的操作?

3个回答

10

是的 - 使用接受索引的Select()重载,我们可以通过将其投影到一个包含该行本身以及其行号的匿名类型来实现:

var targetLines = File.ReadAllLines(@"foo.txt")
                      .Select((x, i) => new { Line = x, LineNumber = i })
                      .Where( x => x.Line.Contains("pattern"))
                      .ToList();

foreach (var line in targetLines)
{
    Console.WriteLine("{0} : {1}", line.LineNumber, line.Line);
}

由于控制台输出是副作用,应该将其与LINQ查询本身分开。


太棒了!!我以为它会涉及某种允许我使用匿名类型的东西,但我只是无法将两者结合起来。 - coson

0

可以使用LINQ。但是,由于您还想要行号,因此通过自己迭代代码可能更易读:

    const string pattern = "foo";
    for (int lineNumber = 1; lineNumber <= allLines.Length; lineNumber++)
    {
        if (allLines[lineNumber-1].Contains(pattern))
        {
            Console.WriteLine("{0}. {1}", lineNumber, allLines[i]);
        }
    }

-1

类似这样的代码应该可以运行

var result = from line in File.ReadAllLines(@"path")
             where line.Substring(0,1) == "a" // put your criteria here
             select line

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接