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

本文关键字:字符 字符串 串并 返回 搜索 文件 何搜索 文本 | 更新日期: 2023-09-27 18:00:47

例如,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语言?

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

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

大型文件

如果文件很大并且包含兆字节的数据:使用流读取器,读取文件直到EndOfLine,分析刚刚读取的字符串

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搜索子字符串。如果您使用的是.NET 4或更新版本,您可以利用新的助手(File.ReadLines()),它不会读取整个文件,而是作为deffered操作读取。

.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可以更高效。

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

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

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

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

3) 循环或linq行并使用IndexOf(matchstring)>-1 查找匹配

4) 返回结果