读取数据文件到一个数组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
什么是做到这一点的最好办法都值?我会从文件中读取一行文件,然后分别分割每个字符并将其传输到新阵列中?或者也许读一行,然后读取每个字符并将其放入数组中?
感谢您的任何帮助。
这应该工作,假设阵列具有固定大小:
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');
}
}
}
我使用您的代码时,出现'索引超出范围'异常。它看起来像它会工作,但我正在通过它现在试图弄清楚它。特别是'(int)(line [j] - '0');'位,我不确定在哪里分割行中的字符以将其放入单独的数组条目中。但非常感谢:) – Joshua 2010-05-08 22:39:41
'line'是一条线; 'line [j]'是位置'j'上的字符; 'line [j] - '0'是由该字符表示的整数(即'0'=> 0,'1'=> 1 ...) – 2010-05-08 22:44:39
关于IndexOutOfRangeException,请检查文件中的行数和行的长度是正确的 – 2010-05-08 22:47:35
你看着二进制序列化?这个线程似乎是类似的。 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