2015-05-29 63 views
1

我在C#桌面應用程序的工作,使用Visual Studio 2010中 我想讀每個記錄並加載了「街道名稱辭典」對我們每個人的狀態。 例如,我讀了第一條記錄(id = 1),所以我加載AlabamaDictionary.txt,因爲這條記錄來自阿拉巴馬州,在加載它之後,啓動地址標準化等另一個過程。當這個過程結束時,我讀下一個記錄(id = 2),我必須檢查「狀態」是否相同,如果是與以前相同的狀態,我不需要再次加載AlabamaDictionary.txt,因爲它尚未加載,啓動另一個像地址標準化這樣的過程。當這個過程完成後,我讀取來自「Arizona」的下一個記錄(id = 3)。這裏狀態改變,所以我需要加載Arizona.txt,並再次啓動另一個地址標準化過程等... 我的問題是改變字典,檢查它是什麼時候改變。如何解決在c#中的循環?

Records 
    "id" | "address"  | "state" 
    1 |100 Elm St  | Alabama 
    2 |300 Trawick St | Alabama 
    3 |50023 N 51st Ave | Arizona 

我有下一個循環 代碼: 數據表記錄;

for (int i = 0; i < records.Rows.Count; i++) 
{ 
string address = records.Rows[i][1].ToString(); 
string state = records.Rows[i][2].ToString(); 
streetDictionary = state + ".txt"; 
if(File.Exists(streetDictionary)) 
{ 
//Here I need to identify state change, 
//so if state change , to use another dictionary and load it, 
//but if don't change it (state), I need to use the same dictionary 
//(if is load it yet) 
LoadStreetDictionary(streetDictionary); 

//Process Address Standardization 
StreetNameStandardization(address) 
} 
} 

請問我該怎麼做這個循環? 非常感謝!

回答

2

您可以存儲你在變量中的最新狀態,並添加檢查每個迭代

string prevState = string.Empty; 
    for (int i = 0; i < records.Rows.Count; i++) 
    { 

     string address = records.Rows[i][1].ToString(); 
     string state = records.Rows[i][2].ToString(); 

    if (!state.Equals(prevSate)) 
    { 
     streetDictionary = state + ".txt"; 
     if(File.Exists(streetDictionary)) 
     { 
      //Here I need to identify state change, 
      //so if state change , to use another dictionary and load it, 
      //but if don't change it (state), I need to use the same dictionary 
      //(if is load it yet) 
      LoadStreetDictionary(streetDictionary); 
     } 


    } 

    //Process Address Standardization 
    StreetNameStandardization(address) 
    prevState = state; //Assigned to latest value 
    } 

編輯:總是執行斯坦dardization功能。

+0

謝謝Maku但不工作,因爲如果我第一次記錄(id = 1狀態=阿拉巴馬州)它工作正常,加載alabama.txt,但在下一個記錄(id = 2狀態=阿拉巴馬州)如果(!狀態.Equals(prevSate))不要讓,我需要在,使用相同的字典先前加載它(不再加載) – Patricio

+0

對不起,我錯過了這部分「開始像地址標準化的另一個過程。」。我更新了我的答案。 – Sherlock

+0

非常感謝!它工作完美。 – Patricio

3

您的循環之前定義一個變量...

string lastState=""; 

然後附上字典的讀數進行檢查,看看是否仍然在相同的狀態

if (!state.equals(lastState)) 
{ 
    // read the dictionary here 

    // then... 
    lastState = state; 
} 
// check your address here 
StreetAddressStandardization(); 
+0

感謝吉爾克里斯特,但不工作,因爲如果我第一個記錄(ID = 1個狀態=阿拉巴馬州「),它做工精細,裝載alabama.txt,但在接下來的記錄(ID = 2的狀態=阿拉巴馬」 )如果(!state.Equals(prevSate))不讓進去,我需要在,使用相同的字典先前加載它(不再加載) – Patricio

+0

但是,這是整點,你不「讓」在閱讀第二個字典,因爲它已經被閱讀。但是您仍然在執行StreetNameStandardization,因爲它不在if語句中。 – AgapwIesu

+0

僅當記錄按狀態排序時才起作用,這從代碼中不明顯。 – Bond

2

我希望能夠正確理解您的請求。

String lastState = ""; 
for (int i = 0; i < records.Rows.Count; i++) 
{ 
    string address = records.Rows[i][1].ToString(); 
    string state = records.Rows[i][2].ToString(); 
    streetDictionary = state + ".txt"; 
    if(File.Exists(streetDictionary)) 
    { 
     if (currentState != state) 
      LoadStreetDictionary(streetDictionary); 
     lastState = state; 

     //Process Address Standardization 
     StreetNameStandardization(address) 
    } 
} 
+0

感謝布萊恩,但沒有工作,因爲如果我讀第一個記錄(id = 1狀態=阿拉巴馬州)它工作正常,加載alabama.txt,但在下一個記錄(id = 2狀態=阿拉巴馬州)不工作,因爲負載字典爲每個記錄,我只需要加載一次,只有當狀態改變時加載一個新的字典。非常感謝你!我很抱歉我的英語不好 – Patricio

+0

我明白了,抱歉讓我感到困惑。我更新了我的答案 –