文本文件解析 - 如何搜索特定字符串并返回整行?

时间:2013-02-22 11:35:54

标签: c#

例如txt文件有以下条目说:

england is cold country
India is poor country
england is cold country
england is cold country
India is poor country
english county cricket season.

现在我想在这个txt文件中搜索字符串“england”并返回包含该字符串的整行。我怎么能用C sharp语言呢?

3 个答案:

答案 0 :(得分:2)

我会考虑两种方法,对于大文件(兆字节)和相对较小的文件。

大文件

如果文件很大且包含数兆字节的数据:使用流阅读器,读取文件untile EndOfLine,分析只是readed字符串

string pattern = "england";
IList<string> result = new List<string>();
using (var reader = new StreamReader("TestFile.txt")) 
{
    string currentLine;
    while ((currentLine= reader.ReadLine()) != null) 
    {
        if (currentLine.Contains(pattern)
        {
            // if you do not need multiple lines and just the first one
            // just break from the loop (break;)            
            result.Add(currentLine);
        }
    }
}

小文件

如果文件很小,你可以使用helper将所有文件内容作为字符串数组返回 - (File.ReadAllLines())每行字符串,然后使用LINQ搜索substring。如果您使用的是.NET 4或更新版本,则可以利用新的帮助程序(File.ReadLines()),它不会读取整个文件,而是读取为自动操作。

.NET 2.0 - 3.5:

string pattern = "england";
IEnumerable<string> result = File.ReadAllLines()
                                 .Where(l => l.Contains(pattern));

.NET4 - 4.5:

string pattern = "england";
IEnumerable<string> result = File.ReadLines()
                                 .Where(l => l.Contains(pattern));

如果您只需要第一行,请使用.FirstOrDefault(l => l.Contains(pattern))代替Where(l => l.Contains(pattern))

MSDN

  

ReadLines和ReadAllLines方法的不同之处如下:使用时   ReadLines,您可以先开始枚举字符串集合   整个系列归还;当你使用ReadAllLines时,你必须   在您可以访问之前等待返回整个字符串数组   数组。因此,当您使用非常大的文件时,   ReadLines可以更有效率。

答案 1 :(得分:0)

你可以这样做。如果你想用“england”返回所有行,你需要创建一个字符串列表并返回它。

foreach(string line in File.ReadAllLines("FILEPATH"))
    {
    if(line.contains("england"))
       return line;
    }
    return string.empty;

答案 2 :(得分:0)

1)阅读所有行。 http://msdn.microsoft.com/en-us/library/system.io.file.readalllines.aspx

2)创建一个字符串列表以填充匹配

3)使用IndexOf(matchstring)&gt;循环或linq这些行并寻找匹配。 -1

4)返回结果