You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:09:09