2012-08-10 56 views
0

這是一個小邏輯問題。我的數據網格按時間順序包含日期時間值。 如果用戶輸入無序日期時間,程序應該突出顯示無序的行。 例如:這是最初的訂單。查看時間順序並返回錯誤排

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,pData的類型爲DataArray。 所以當我說pdata[np - 1].DateTime它指的是日期時間單元格。

+0

看看「正則表達式」類,它應該能夠解決您的問題。 – dotTutorials 2012-08-10 17:42:41

+0

是不是正則表達式類用於匹配模式?你有沒有例子? – user1580726 2012-08-10 17:50:16

回答

0

您的代碼表示,用於序列(A,C,B,d),C被認爲是不按順序,因爲C沒有A和B.

之間落入在序列的情況下(5.0, 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不合適,因爲它應該在B之後,或B不合適,因爲它應該在C之前?

重讀您的問題後,聽起來用戶一次只能輸入一個日期,並且您應該在每次新條目後檢查有效的訂單。這簡化了一些事情。您應該找到用戶輸入的日期,然後將其與前後列表中的日期進行比較。如果它不在該範圍內,請突出顯示新的日期。現在,您正在檢查每個條目的正確範圍,因此如果您晚於條目列入條目,那麼之前的條目將被視爲不正確。如果您早於應該將條目放入列表中,您的算法就可以工作。

相關問題