例如 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 语言来做到这一点?
例如 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);
}
}
}
如果文件很小,您可以使用帮助器将所有文件内容作为字符串数组返回 - ( File.ReadAllLines() ) 每行字符串,然后使用 LINQ 搜索子字符串。如果您正在使用.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 会更有效率。
你可以这样做。如果你想返回所有带有“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) 返回结果