基本上我有一个存储在列表中的DWG文件目录,我需要搜索并查找文件名中具有相同Well Name但最新日期的文件。文件名的示例如下:
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
史密斯有一个数字08-14,这不是日期。我需要以某种方式与类似文件进行比较的日期位于文件名的末尾。例如,在Smith 08-14 #3-14H11 FINAL 02-05-2011.dwg
和Smith 08-14 #3-14H11 FINAL 03-11-2011.dwg
之外,我需要从我的列表中删除Smith 08-14 #3-14H11 FINAL 02-05-2011.dwg
,因为具有相同Well名称的另一个文件具有更新的日期。
答案 0 :(得分:1)
创建数据表并将文件名拆分为各种组件:
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
。
现在您将按(名称,日期)排序,然后只使用符合您标准的那些。
答案 1 :(得分:1)
假设您的文件名属于某种List<String>
,或者您可以将其用作。{/ p>
创建一个小类来存储每个文件的信息
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;
}
}