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

如何根据创建日期对文本文件行进行排序?

按文本文件中的日期时间列排序的解决方案

核心思路

要实现按日期列排序,关键是准确提取每行的日期字符串,再安全解析为DateTime类型,最后以此为依据排序。结合你提供的代码,梳理出可行步骤:

  1. 拆分每行提取日期字段:你的文本行用空格分隔,日期位于第3个字段(索引2),按任意数量空格拆分每行,避免因多空格导致拆分错位。
  2. 容错式解析日期:用DateTime.TryParseExact替代ParseExact,避免某行格式异常时直接崩溃,解析失败的行可统一放到排序结果末尾(或开头)。
  3. 高效读取与排序:直接用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 18:24:26