读取数据文件到一个数组C#

问题描述:

我有一个这样的数组:读取数据文件到一个数组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

这应该工作,假设阵列具有固定大小:

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