-4

I am developing an application to perform searches inside files, I wrote the following code to do this:

        foreach (var file in filesInDir)
        {
            string[] lines = File.ReadAllLines(file.FullName);
            for(int i=0;i<lines.Length;i++)
                if(lines[i].Contains("123456789"))
                    Console.Write("File: {0}\nLine: {1}", file.FullName, i + 1);
        }

So, I wonder how I can accomplish this research, using Linq, is this possible to do?

4

2 に答える 2

9

インデックス(行番号)とともに行を選択し、文字列を照会して、後で次のLineNoように選択します。

var result = lines.Select((r, i) => new { line = r, index = i })
                .Where(r => r.line.Contains("123456789"))
                .Select(r => new { LineNo = r.index });

表示する:

foreach(var item in result)
    Console.Write("File: {0}\nLine: {1}", file.FullName, item.LineNo);

編集

次のようなディレクトリ内のすべてのファイルに対して次を試すこともできます。

var result = filesInDir.Select(t => new { lines = File.ReadAllLines(t.FullName), FileName = t.Name })
           .Select((r, i) => new { line = r.lines, index = i, FileName = r.FileName })
           .Where(r => r.line.Contains("123456789"))
           .Select(r => new { FileName = r.FileName,  LineNo = r.index });

次に、表示のために:

foreach (var item in result)
    Console.Write("File: {0}\nLine: {1}", item.FileName, item.LineNo);
于 2013-07-30T13:18:16.407 に答える
4
var lines = File.ReadAllLines(file.FullName).ToList();    

lines.Where(x=>x.Contains("123456790")).ToList().ForEach(x=>Console.Write("File: {0}\nLine: {1}", x.FullName, lines.IndexOf(x)));
于 2013-07-30T13:16:35.867 に答える