使用c#搜索文本文件并显示行号和包含搜索关键字的完整行

时间:2010-03-13 08:09:41

标签: c# command-line text streamreader line-numbers

我需要帮助才能使用c#搜索文本文件(日志文件)并显示行号和包含搜索关键字的完整行。

3 个答案:

答案 0 :(得分:22)

这是对http://msdn.microsoft.com/en-us/library/aa287535%28VS.71%29.aspx

的略微修改
int counter = 0;
string line;

// Read the file and display it line by line.
System.IO.StreamReader file = new System.IO.StreamReader("c:\\test.txt");
while((line = file.ReadLine()) != null)
{
    if ( line.Contains("word") )
    {
        Console.WriteLine (counter.ToString() + ": " + line);
    }

   counter++;
}

file.Close();

答案 1 :(得分:11)

在这个游戏上有点迟到,但在这篇文章中发生过,我想我会添加一个替代答案。

foreach (var match in File.ReadLines(@"c:\LogFile.txt")
                          .Select((text, index) => new { text, lineNumber = index+ 1 })
                          .Where(x => x.text.Contains("SEARCHWORD")))
{
    Console.WriteLine("{0}: {1}", match.lineNumber, match.text);
}

这使用:

  • File.ReadLines,它消除了对StreamReader的需要,并且它还可以很好地与LINQ的Where子句一起使用来返回来自a的过滤后的一组行文件

  • Enumerable.Select的重载返回每个元素的索引,然后可以将其加1,以获取匹配行的行号。

示例输入:

just a sample line
another sample line
first matching SEARCHWORD line
not a match
...here's aSEARCHWORDmatch
SEARCHWORD123
asdfasdfasdf

输出:

3: first matching SEARCHWORD line
5: ...here's aSEARCHWORDmatch
6: SEARCHWORD123

答案 2 :(得分:1)

要导出执行Excel,您可以使用CSV文件格式,如Pessimist所写。如果您不确定要写什么,请尝试在MS Excel中输入一些数据并单击菜单中的“另存为”选项,然后选择CSV作为文件类型。

在编写CSV文件格式时要小心,因为在某些语言中,分隔值的默认值不是逗号。例如,在巴西葡萄牙语中,默认值为逗号作为小数分隔符,点为千位分隔符和分号用于分隔值。写这篇文章时要注意文化。

另一种方法是使用水平制表符作为分隔符。尝试编写一个字符串,按TAB键,然后按另一个字符串并将其粘贴到Microsoft Excel中。它是该程序中的默认分隔符。

如果您正在使用针对特定问题的临时解决方案,则可以不经过深思熟虑地使用其他替代方案。如果您正在编写其他人(或其他环境)使用的内容,请注意文化特定的差异。

哦,我现在才记得:你可以使用XML编写一个电子表格,你可以只使用.NET软件包。几年前我用C#.NET 2.0

完成了这项工作