如何修改C#代码从文本文件筛选以特定字符串开头的行?
解决从文本文件查找特定开头行的问题
嘿,这问题我熟!给你几个实用的方案,轻松搞定从文本文件找以"CERTAINWORD"开头的行,找不到就返回null的需求:
方案1:用LINQ快速实现(最简洁)
直接在你的ReadAllLines基础上,结合LINQ的FirstOrDefault方法就能搞定,一行代码解决:
string targetLine = System.IO.File.ReadAllLines(@"C:\INPUTFILE.txt") .FirstOrDefault(line => line.StartsWith("CERTAINWORD", StringComparison.OrdinalIgnoreCase));
解释:
ReadAllLines会把文件所有行读取到字符串数组里FirstOrDefault会返回第一个符合StartsWith条件的行;如果没有任何行匹配,就自动返回null- 第二个参数
StringComparison.OrdinalIgnoreCase是让匹配不区分大小写,如果需要严格区分,直接去掉这个参数就行:line.StartsWith("CERTAINWORD")
方案2:用循环遍历(适合不想用LINQ的场景)
如果你更习惯用传统循环,也可以这么写:
string targetLine = null; foreach (string line in System.IO.File.ReadAllLines(@"C:\INPUTFILE.txt")) { if (line.StartsWith("CERTAINWORD")) { targetLine = line; break; // 找到第一个匹配的行就退出循环,提升效率 } }
优化建议:处理大文件的情况
注意:如果你的文件特别大,ReadAllLines会把所有内容加载到内存里,可能占用过多资源。这时候推荐用File.ReadLines替代,它是延迟加载的,会逐行读取文件,不用一次性加载全部内容:
string targetLine = System.IO.File.ReadLines(@"C:\INPUTFILE.txt") .FirstOrDefault(line => line.StartsWith("CERTAINWORD", StringComparison.OrdinalIgnoreCase));
ReadLines返回的是IEnumerable<string>,只会在需要的时候读取下一行,内存友好度更高。
内容的提问来源于stack exchange,提问作者user5659664
相关产品推荐
相关产品推荐

