2011-08-03 2 views
0

기본적으로 나는 에 저장되어있는 DWG 파일의 디렉토리를 가지고 있으며 파일 이름에서 동일한 이름이지만 가장 최근 날짜가있는 파일을 검색해야합니다. 숫자 08-14이 스미스 후파일 이름에 전체 날짜가있는 파일을 찾고 유사한 파일과 비교하려면 어떻게해야합니까?

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 #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을 제거해야합니다.

+1

Raj- 안녕 주권 @ –

답변

1

파일 이름이 List<String> 일종의 것으로 가정하거나 그 이름으로 사용할 수 있습니다.

내가 그것을 테스트하지 않았습니다

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(); 

작은 클래스는이 클래스와 파일의 목록을 사용하여 각 파일에 다음

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; 
    } 

} 

에 대한 정보를 저장할 수 있도록하지만 당신

을 위해 일한다

예제 프로그램

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; 
    } 

} 

+0

@ msarchet- 이것은 훌륭한 msarchet입니다. 날짜를 분석하기 전에 "_1"또는 "_2"가있는 파일을 무시한 IF 문을 포함하고 싶다면 어디에 넣을 수 있습니까? 때때로 Smith 08-14 # 3-14H11 FINAL 02-05-2011_1.dwg와 같은 파일이있을 수 있으며 그 파일을 건너 뛰고 단지 02-05-2011.dwg와 같이 끝나는 파일에만 집중하고 싶습니다. 이것은 확실히 도움이됩니다. –

+0

@Joshua, 가장 쉬운 방법은 필터링하기 전에 문자열을 검사하는 것입니다. var ConvertedFileList = wellList.Where (x => IsValidFileString (x))와 같은 것입니다. (x => new WellFile (x)); – msarchet

1

데이터 테이블을 확인하고 다양한 구성 요소에 파일 이름을 깰 :

Smith 08-14 #3-14H11 FINAL 02-05-2011.dwg 파일 이름 02-05-2011.dwg의 마지막 14 개 문자를 받아 다음 .dwg에 제거, 예를 들어

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

된다 그것을 02-05-2011으로 만드십시오.

이제 (이름, 날짜)로 정렬 한 다음 기준에 맞는 것을 사용하십시오.

+0

... 읽기 정말 열심히 , 그래서 그 다른 섹션에 파일 이름을 깨고 문자열의 방법을 사용해야합니까? –

관련 문제