文本文件解析-如何搜索特定字符串并返回整行
本文关键字:字符 字符串 串并 返回 搜索 文件 何搜索 文本 | 更新日期: 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) 返回结果