2010-05-08 78 views
0

我有一個這樣的數組:讀取數據文件到一個數組C#

int[,] iMap = new int[iMapHeight, iMapWidth] { 
       { 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 
       { 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 
       { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 
       { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 
       { 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 
       { 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 
       { 2, 2, 2, 2, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2}, 
       { 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 
       { 0, 0, 0, 1, 1, 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 
       { 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 
       { 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 
       { 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 
       { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 
       { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0}, 
       { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 
       { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 
       { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 
       { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 
       { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0}, 
       { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 
    }; 

而且我想從數據文件來同樣的事情。該文件的結構應當這樣最好:

0000000000000000000000000 
0000000000000000000000000 
0000000000000000000000000 
0000000000000000000000000 
0000000000000000000000000 
0000000000000000000000000 
0000000000000000000000000 
0000000000000000000000000 
0000000000000000000000000 
0000000000000000000000000 
0000000000000000000000000 
0000000000000000000000000 
0000000000000000000000000 
0000000000000000000000000 

這將最終使像上面的陣列設置爲0

什麼是做到這一點的最好辦法都值?我會從文件中讀取一行文件,然後分別分割每個字符並將其傳輸到新陣列中?或者也許讀一行,然後讀取每個字符並將其放入數組中?

感謝您的任何幫助。

+0

你看着二進制序列化?這個線程似乎是類似的。 http://stackoverflow.com/questions/223700/c-optimising-binary-serialization-for-multi-dimensional-generic-arrays此線程接受的答案http://social.msdn.microsoft.com/Forums/ EN-US/csharplanguage /線程/ 90c98754-2580-404a-81ae-aedba5f2604d。 – 2010-05-08 22:21:47

回答

1

這應該工作,假設陣列具有固定大小:

int[,] iMap = new int[iMapHeight, iMapWidth]; 
using (var reader = new StreamReader(fileName)) 
{ 
    for (int i = 0; i < iMapHeight; i++) 
    { 
     string line = reader.ReadLine(); 
     for(int j = 0; j < iMapWidth; j++) 
     { 
      iMap[i, j] = (int)(line[j] - '0'); 
     } 
    } 
} 
+0

我使用您的代碼時,出現'索引超出範圍'異常。它看起來像它會工作,但我正在通過它現在試圖弄清楚它。特別是'(int)(line [j] - '0');'位,我不確定在哪裏分割行中的字符以將其放入單獨的數組條目中。但非常感謝:) – Joshua 2010-05-08 22:39:41

+0

'line'是一條線; 'line [j]'是位置'j'上的字符; 'line [j] - '0'是由該字符表示的整數(即'0'=> 0,'1'=> 1 ...) – 2010-05-08 22:44:39

+0

關於IndexOutOfRangeException,請檢查文件中的行數和行的長度是正確的 – 2010-05-08 22:47:35