我如何找到文件名中有完整日期的文件,并将它们与类似的文件进行比较?

本文关键字:文件 比较 文件名 日期 何找 | 更新日期: 2023-09-27 18:04:20

基本上我有一个存储在列表的DWG文件目录,我需要搜索并找到具有相同井名但在文件名中的最新日期的文件。文件名的示例如下:

Smith 08-14 #3-14H11 FINAL 02-05-2011.dwg
Scroggins 07-14 3-14 SDWD FINAL 10-28-2009.dwg
Smith 08-14 #3-14H11 FINAL 03-11-2011.dwg
Russel 10-15 #4-33H21 FINAL 10-07-2009.dwg
Scroggins 07-14 3-14 SDWD FINAL 11-29-2010.dwg 

注意Smith后面有一个数字08-14,那不是日期。我需要以某种方式与类似文件进行比较的日期位于文件名的末尾。因此,例如在Smith 08-14 #3-14H11 FINAL 02-05-2011.dwgSmith 08-14 #3-14H11 FINAL 03-11-2011.dwg中,我需要从我的列表中删除Smith 08-14 #3-14H11 FINAL 02-05-2011.dwg,因为具有相同井名的另一个文件具有较新的日期。

我如何找到文件名中有完整日期的文件,并将它们与类似的文件进行比较?

假设您的文件名是某种List<String>格式,或者您可以这样使用它们。

创建一个小类来存储每个文件的信息

public class WellFile
{
   public DateTime FileDate { get; set; }
   public String WellName { get; set; }
   public String OriginalFile {get; set; }
   public WellFile(String FileName)
   {
      var fileHeader = FileName.Split('.').First().Split(' ').ToList();
      WellName = fileHeader.First();
      FileDate = DateTime.Parse(fileHeader.Last());
      OriginalFile = FileName;
   }
}

然后使用这个类和你的文件列表

var ConvertedFileList = YourFileList.Select(x => new WellFile(x));
var NewestWellFile = ConvertedFileList.GroupBy(x => x.WellName)
                                      .Select(group => group.OrderByDescending(x => x.FileDate).First().OriginalFile).ToList();

我还没有测试过,但是应该可以用


程序示例

using System;
using System.Linq;
using System.Collections.Generic;
public class Foo
{
    public static void Main()
    {
        var wellList = new List<String>() {"Smith 08-14 #3-14H11 FINAL 02-05-2011.dwg",
                                           "Scroggins 07-14 3-14 SDWD FINAL 10-28-2009.dwg",
                                           "Smith 08-14 #3-14H11 FINAL 03-11-2011.dwg",
                                           "Russel 10-15 #4-33H21 FINAL 10-07-2009.dwg",
                                            "Scroggins 07-14 3-14 SDWD FINAL 11-29-2010.dwg"}; 
        var ConvertedFileList = wellList.Select(x => new WellFile(x));
        var NewestWellFile = ConvertedFileList.GroupBy(x => x.WellName)
                                      .Select(group => group.OrderByDescending(x =>                              x.FileDate).First().OriginalFile).ToList();
        NewestWellFile.ForEach(x => Console.WriteLine(x));
        Console.Read();
    }
}
public class WellFile
{
   public DateTime FileDate { get; set; }
   public String WellName { get; set; }
   public String OriginalFile {get; set; }
   public WellFile(String FileName)
   {
      var fileHeader = FileName.Split('.').First().Split(' ').ToList();
      WellName = fileHeader.First();
      FileDate = DateTime.Parse(fileHeader.Last());
      OriginalFile = FileName;
   }
}

创建一个数据表,并将文件名分成不同的组件:

Smith 08-14 #3-14H11 FINAL 02-05-2011.dwg变为

Name = 'Smith'
Code1 = '08-14 #3-14H11'
Revision =  'FINAL'
Date = '02-05-2011'

例如,取文件名02-05-2011.dwg的最后14个字符,然后去掉.dwg,使其成为02-05-2011

现在你将排序(名称,日期),然后只使用那些符合你的条件。