例如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语言呢?
答案 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)返回结果