如何通过File.ReadLines获取大文本文件中匹配条件的行内容
获取匹配的行内容而非布尔值
当然可以用File.ReadLines实现这个需求!它本身是延迟加载的特性,非常适合处理大文件,不会一次性把整个文件加载到内存里,完全契合你的使用场景。
你当前用Any()仅返回是否存在匹配项,只需要替换成对应的方法就能拿到具体行内容:
获取第一行匹配的内容
如果你只需要找到第一个符合条件的行,用FirstOrDefault()就可以:
string matchedLine = File.ReadLines(textBox2.Text) .FirstOrDefault(x => x.ToLower().Contains(name.ToLower()) || x.Contains(date_to_chk1));
- 如果找到匹配行,
matchedLine就是对应的行内容; - 如果没有匹配项,它会返回
null,你可以通过判断matchedLine != null来替代原来的isItThere布尔值。
获取所有匹配的行
如果文件中可能有多行符合条件,想要全部获取,就用Where()来筛选:
IEnumerable<string> allMatchedLines = File.ReadLines(textBox2.Text) .Where(x => x.ToLower().Contains(name.ToLower()) || x.Contains(date_to_chk1));
因为File.ReadLines是延迟执行的,遍历allMatchedLines时才会逐行读取文件,依然保持对大文件的内存友好性。你可以把它转成列表(比如ToList())方便后续操作,或者直接遍历处理每一行。
另外提个小优化:如果name的匹配需要不区分大小写,用StringComparison.OrdinalIgnoreCase代替ToLower()性能会更好,示例如下:
x.Contains(name, StringComparison.OrdinalIgnoreCase)
内容的提问来源于stack exchange,提问作者Arsalan Sherwani
相关产品推荐
相关产品推荐

