C#中File.ReadLines读取TXT文件无法正确识别行,求解决方案
解决TXT文件无换行时的行识别问题
你的问题核心其实是目标TXT文件里根本没有换行符——所有记录都挤在同一行里,所以用File.ReadLines或者按\n拆分自然没法正确识别每条数据。
先看你提供的原始内容:
X02233 52330 DISCHY 8 BLUZ std STD 0 0 0 0 0 8698230653909 0.00 X02237 52337 VALONIA BLUZ STD STD 0 0 0 0 0 8698230653916 0.00 X02245 72458 HARMONY 9 BLUZ STD STD 0 0 0 0 0 8698230653923 0.00
每条记录的规律很清晰:以X开头,以0.00结尾。针对这种情况,用正则表达式提取每条记录是最靠谱的方案。
具体实现代码(C#)
using System; using System.IO; using System.Text.RegularExpressions; using System.Linq; // 读取文件全部内容 string text = File.ReadAllText(lblPath.Text); // 正则匹配:以X开头,直到0.00结尾的所有内容(非贪婪匹配避免跨记录) var regex = new Regex(@"X\d+.*?0\.00", RegexOptions.Singleline); var matches = regex.Matches(text); // 把匹配结果转成字符串列表,就是你想要的"行"集合 var lines = matches.Cast<Match>().Select(m => m.Value).ToList(); // 测试输出第一条记录 if(lines.Any()) Console.WriteLine(lines[0]);
为什么这个方案有效?
X\d+:精准匹配每条记录的起始标识(X开头加数字).*?:非贪婪模式的任意字符匹配,确保不会从第一个X一直匹配到最后一个0.00,避免跨记录0\.00:匹配每条记录的结尾标识,转义.是因为它在正则里是通配符,必须转义才能匹配实际的小数点RegexOptions.Singleline:让.可以匹配换行符(虽然你的文件没有换行,但留着能兼容未来可能带换行的同类文件)
替代方案(如果字段数固定)
如果每条记录的字段数量是固定的(比如你示例里每条有14个字段),也可以先按空格拆分所有字段,再按字段数分组:
var allFields = text.Split(new[] {' '}, StringSplitOptions.RemoveEmptyEntries); int fieldsPerLine = 14; // 你的示例每条是14个字段 var lines = Enumerable.Range(0, allFields.Length / fieldsPerLine) .Select(i => string.Join(" ", allFields.Skip(i * fieldsPerLine).Take(fieldsPerLine))) .ToList();
但这个方案不如正则灵活,如果字段里包含空格(比如VALONIA BLUZ里的空格)就会失效,所以优先推荐正则方案。
内容的提问来源于stack exchange,提问作者Alican Kablan
相关产品推荐
相关产品推荐

