从数据文件中将数据加载到2D数组中?

时间:2013-10-25 17:23:26

标签: c# text-files multidimensional-array streamreader

我在控制台应用程序中使用C#。

我需要从文本文件加载数据并将其加载到2d数组中。

这是我尝试过的,但当我尝试打印出返回内容时,没有任何内容被打印出来。

public static int[,] LoadMap()
{
    const string path = @"1.txt";

    string[] fileLines = File.ReadAllLines(path);
    int[,] map = new int[fileLines.Length, 15];
    string line;
    for (int i = 0; i < fileLines.Length; ++i)
    {
        line = fileLines[i];
        for (int j = 0; j < line.Length; ++j)
        {
            map[i, j] = (int)(line[j] - '0');
        }
    }

    return map;
}

但是,当我对这些数据进行硬编码时,一切都会完美显示。

private static int[,] Map = new int[MapX, MapY]
{
            { 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
            { 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, 1},
            { 1, 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, 1},
            { 1, 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, 1},
            { 1, 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, 1},
            { 1, 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, 1},
            { 1, 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, 1},
            { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
            { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}
};

文本文件中的数据如下所示:

0,0,0,1,1,1,1,1,1,1,1,1,1,1,1
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,1
1,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,1
1,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,1
1,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,1
1,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,1
1,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,1
1,0,0,0,0,0,0,0,0,0,0,0,0,0,1
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1

无论您是修复我尝试的内容还是提出完全不同的内容,都将不胜感激。谢谢。

4 个答案:

答案 0 :(得分:3)

 string[] fileLines = File.ReadAllLines(path);
        int[,] map = new int[fileLines.Length,fileLines[0].Split(',').Length];
        for (int i = 0; i < fileLines.Length; ++i)
        {
            string line = fileLines[i];
            for (int j = 0; j < map.GetLength(1); ++j)
            {
                string[] split = line.Split(',');
                map[i, j] = Convert.ToInt32(split[j]);
            }
        }
        return map;
    }

答案 1 :(得分:0)

您可以使用LINQ来解析这些行:

var lines = File.ReadAllLines(path);
int[,] map = new int[fileLines.Length, 25];
for (int i = 0; i < fileLines.Length; ++i)
{
    var data = lines[i].Split(',').Select(c => Convert.ToInt32(c)).ToList();
    for(int j =0; j<25; ++j)
       map[i,j] = data[j];
}
return map;

如果你可以使用锯齿状数组而不是2D数组,这就变得更简单了:

public static int[][] LoadMap()
{
    return File.ReadLines(path)
             .Select(l => l.Split(',').Select(Convert.ToInt32).ToArray())
             .ToArray();
}

答案 2 :(得分:0)

如果您的文本文件使用逗号分隔值,请替换此行:

for (int j = 0; j < line.Length; ++j)

使用:

for (int j = 0; j < line.Length; j += 2)

假设你的值总是只有1个字符。

答案 3 :(得分:0)

当数据来自文本文件时。如果用逗号分隔,可以使用string.split将其分隔。然后你加载你进入数组的内容并像平常一样访问它。 如下所示:

  string[] lines = System.IO.File.ReadAllLines(@"path");
  foreach (string line in lines)
  {  
      string[] first= line.Split(comma);
  }