2011-07-15 140 views
0

我試圖檢索隔離的存儲文件中的所有數據。 但我得到一個索引超出範圍的錯誤。 家^ ^如何唷指數超出範圍wp7

StreamReader readFile = new StreamReader(new IsolatedStorageFileStream("AlarmFolder\\alarm.txt", FileMode.Open, myStore)); 

string[] alarmDetailsSeparated; 

String fileText = readFile.ReadLine(); 


//alarmDetailsSeparated is the array that hold the retrieved alarm details from alarm.txt and is split by '^' 
alarmDetailsSeparated = fileText.Split(new char[] { '^' }); 

foreach (string home in alarmDetailsSeparated) 
{ 
    for (i = 0; i < alarmDetailsSeparated.Length;) 
    { 
     if (test > 0) 
     { 
      i = test; 
     } 

     dateSeparate = alarmDetailsSeparated[i]; 
     timeSeparate = alarmDetailsSeparated[i + 1]; 
     labelSeparate = alarmDetailsSeparated[i + 2]; 

     date = dateSeparate; 
     time = timeSeparate; 
     label = labelSeparate; 

     test = test + 3 ; 
     break; 
    } 

    MessageBox.Show("i is " + alarmDetailsSeparated[i]); 
    MessageBox.Show("i + 1 is " + alarmDetailsSeparated[i + 1]); 
    MessageBox.Show("i + 2 is " + alarmDetailsSeparated[i + 2]); 
} 
+0

如果你知道有多少元素應該是在'alarmDetailsS​​eparated',爲什麼不對其進行索引,而不是直接通過他們的循環? 當然,您應該確認實際存在的元素的預期數量。 –

+0

你的for循環看起來很奇怪,目前還不清楚'test'是在哪裏聲明的,它包含了什麼。 – Filburt

+0

你能舉個例子嗎?我不是很確定如何做 –

回答

0

好吧,IIUC您存儲文件看起來是這樣的:

home^date^time^label 
home^date^time^label 
... 

,你想要做的每個報警數據錄入處理在文件中。

string[] lines = file.ReadAllLines("alarms.dat"); 
foreach (line in lines) { 
    // handle the alarm data entry (see below) 
} 

現在你可以做分割爲你做你的代碼:

string[] data = line.Split(new char[] { '^' }); 

這應該給你

你需要做的第一件事是在每行把它分解4項,如果行有你想要的數據,所以檢查此:現在

if (data.Length == 4) { // looks like an alarm data entry 
    // do processing on the alarm data entry (see below) 
} 

數據可以提取:

string home = data[0]; 
string date = data[1]; 
string time = date[2]; 
string label = date[3]; 

然後採取行動:

MessageBox.Show(String.Format("home {0} at {1} on date {2} with label {3}", 
       home, time, date, label)); 
+0

嗨我的數據被保存在一個單獨的行中的隔離存儲文件中,使得看起來像這樣.. home^date^time^label^home^date^time^label^home^date^time^label^... .... –

1

在循環中,你是從0去的alarmDetailsSeparated長度。這很好,但是您使用i+1i+2索引alarmDetailsSeparated

這意味着當循環爲alarmDetailsSeparated.Length-2時,程序將索引alarmDetailsSeparated.Length-2+2 = alarmDetailsSeparated.Length並引發超出界限的錯誤。

+0

裏面有2個數據時纔會循環一次,那麼我應該如何改變它? –

+0

嘗試:'for(i = 0; i reece

+0

我試圖做的i + = 3 .. 但我有一個警告窗體視覺工作室,說明無法到達的代碼檢測到我+ = 3 –

1
dateSeparate = alarmDetailsSeparated[i]; 
timeSeparate = alarmDetailsSeparated[i + 1]; 
labelSeparate = alarmDetailsSeparated[i + 2]; 

最後2行是有問題的那些:如果從0到alarmDetailsS​​eperated長度循環,但不保證所述當前索引+ 1,或2存在,從而使這一代碼不是安全的(如你看,你會得到一個例外)。

一個簡單的解決辦法是修改你的循環:

for (i = 0; i < alarmDetailsSeparated.Length - 2;) 
+0

我仍然有相同的錯誤 –

+0

唯一缺失的是'測試'當循環初始化?爲什麼它需要? –

+0

當第一次循環時,測試取0和3的值..我把測試放在循環中,而不是隻循環一次 –