2012-08-10 6 views
0

이것은 작은 논리 질문입니다. 내 DataGrid 날짜 순서 시간 값을 시간순으로 있습니다. 사용자가 out of order date time을 입력하면 프로그램은 순서가 잘못된 행을 강조 표시해야합니다. 예 : 이것은 초기 주문입니다. 시간 순서를 확인하고 순서가 잘못된 행을 반환하십시오.

10/5/2010 11:59:59 
10/6/2010 00:00:00 
10/6/2010 11:59:59 

사용자 여기서

10/5/2010 11:59:59 
    ***10/7/2010 00:00:00***  
    10/6/2010 11:59:59 
    10/7/2010 00:00:00 

입사 10/7/2010 00:00:00 순서의 밖으로 프로그램이 정확하게 동작하자.

사용자가 여기

10/5/2010 11:59:59 
10/6/2010 00:00:00 
***10/5/2010 11:59:59*** 
10/7/2010 00:00:00 

10/5/2010 11:59:59 입사 아웃 또는 순서의 행하자. 그러나이 프로그램에서는 10/6/2010 00:00:00을 강조 표시합니다.

여기서 상기 확인 후 코드 :

for (int nRow = 1; nRow < pSeries.Count; ++nRow) 
{ 
    // validation1 
    if (!check_range(nRow, i, pSeries[nRow].tim)) 
    { 
     row = nRow; 
     err = (short)err_typ.e_out_range; 
     goto err_exit; 
    } 
} 

public bool check_range(int np, int nCol, DateTime dt) 
{ 
    DataArray pdata = GetDataArray(nCol); 

    bool valid = (np <= 0 || pdata[np - 1].Datetim <= dt) && 
     (np >= (pdata.Count - 1) || dt <= pdata[np + 1].Datetim); 
    return valid; 
} 

DataArray이 시간 값의 사용자 정의 된 어레이이다. pSeries, pDataDataArray입니다. 그래서 내가 pdata[np - 1].DateTime이라고 말하면 datetime 셀을 참조합니다.

+0

"Regex"클래스를 살펴보면 문제를 해결할 수 있습니다. – dotTutorials

+0

Regex 클래스가 패턴을 일치시키는 데 사용되지 않습니까? 어떤 사례가 있습니까? – user1580726

답변

0

코드는, C는 서열의 경우 (5.0 및 B.

사이에 속하지 않기 때문에 시퀀스 (A, C, B, D)은, C가 순서가 고려되어 있다고 6.0, 5.1, 7.0) 현재 코드는 6.0이 5.0과 5.1 사이에 맞지 않으므로 6.0이 적합하지 않습니다. 그러나 문제 설명은 코드에서 표현되지 않은 행이 다른 위치에 있는지 여부를 결정하는 또 다른 기준을 가지고 있음을 나타냅니다.

추가 규칙은 다음과 같을 것입니다. N + 1이 N-1과 N 사이에있는 경우 N + 1은 행 N이 아닌 비어있는 행입니다.

이 새 규칙을 처음 테스트하는 경우 시퀀스 (5.0, 6.0, 5.1, 7.0)의 경우 5.1을 부재 행으로 플래그 지정합니다. 새 규칙이 false를 반환하면 기존 코드를 보조 테스트로 계속 진행합니다.

아마도 이것을 테스트하는 더 간단한 방법은 각 행 날짜가 이전 행 날짜보다 크거나 같은지 확인하는 것입니다. 두 개가 아닌 행당 한 개만 비교하십시오. 이 테스트에 실패한 행 날짜가되면 "비난"이 이전 행인지 또는 현재 행인지를 결정하기 위해 "둘러보기"해야합니다.오류 상황에서만 사용되기 때문에이 "둘러보기"코드가 얼마나 빠르지는 중요하지 않습니다.

0

잘못 구성된 항목을보다 정확하게 정의해야합니다. 제가 날짜 {A, C, B}에 넣으면 C가 C보다 먼저 있어야하기 때문에 B가 뒤따라야하기 때문에 C가 어긋난 것으로 생각합니까?

질문을 다시 읽은 후에는 사용자가 한 번에 하나의 날짜 만 입력 할 수 있고 새 항목을 입력 할 때마다 유효한 주문을 확인해야합니다. 이것은 약간을 단순화합니다. 사용자가 입력 한 날짜를 찾아서 그 전후의 목록에있는 날짜와 비교해야합니다. 해당 범위에 속하지 않으면 새 날짜를 강조 표시하십시오. 지금은 올바른 범위에 대한 모든 항목을 검사하고 있으므로 나중에 목록에 항목을 넣으면 그 항목 앞에 잘못된 항목이 핑 (ping)됩니다. 리스트에 있어야 할 것보다 빨리 목록에 항목을 넣으면 알고리즘이 작동합니다.

관련 문제