如何根据创建日期对文本文件行进行排序?
按文本文件中的日期时间列排序的解决方案
核心思路
要实现按日期列排序,关键是准确提取每行的日期字符串,再安全解析为DateTime类型,最后以此为依据排序。结合你提供的代码,梳理出可行步骤:
- 拆分每行提取日期字段:你的文本行用空格分隔,日期位于第3个字段(索引2),按任意数量空格拆分每行,避免因多空格导致拆分错位。
- 容错式解析日期:用
DateTime.TryParseExact替代ParseExact,避免某行格式异常时直接崩溃,解析失败的行可统一放到排序结果末尾(或开头)。 - 高效读取与排序:直接用
File.ReadLines读取文件(无需自行封装StreamReader枚举,它本身就是延迟加载的),排序后写入目标文件。
修正后的代码
using System; using System.Collections.Generic; using System.Globalization; using System.IO; using System.Linq; class Program { static void Main() { string inputFilePath = "MyFile.txt"; string outputFilePath = "Sorted_MyFile.txt"; // 读取文件行,按日期列排序 var sortedLines = File.ReadLines(inputFilePath) .OrderBy(line => { // 按任意数量空格拆分,提取日期字段(第3个元素,索引2) var parts = line.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); // 确保拆分后有足够字段再尝试解析 if (parts.Length >= 3 && DateTime.TryParseExact( parts[2], "yyyy MMM dd HH:mm:ss.fff", CultureInfo.InvariantCulture, DateTimeStyles.AssumeLocal, out var dt)) { return dt; } // 解析失败的行放到最后 return DateTime.MaxValue; }); // 将排序后的行写入新文件 File.WriteAllLines(outputFilePath, sortedLines); } }
关键细节说明
- 拆分逻辑:
Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)可处理任意数量的连续空格,避免因分隔符不统一导致提取错误。 - 容错处理:增加
parts.Length >= 3判断,防止某行字段不足时索引越界;解析失败的行返回DateTime.MaxValue会被排到最后,也可改成DateTime.MinValue放到最前。 - 日期格式字符串:
"yyyy MMM dd HH:mm:ss.fff"严格匹配英文月份缩写的日期格式,搭配CultureInfo.InvariantCulture避免区域设置影响解析结果。
内容的提问来源于stack exchange,提问作者user20206368
相关产品推荐
相关产品推荐

