из текстового файла в 2D-массив

#c# #arrays

#c# #массивы

Вопрос:

Я понятия не имею, как создать функциональную программу, и я хочу перенести текстовый файл в 2D массив.

Спасибо за ответы

Это содержимое моего текстового файла:

 0000000011
0011100000
0000001110
1000011100
1000000000
0000111111
1000001100
1000000000
1000011000
1000001111
  

Код:

 static void Main(string[] args)
{
    int[,] map = new int[10, 10];

    StreamReader reader = new StreamReader(@"Lode.txt");

    for (int i = 0; i < 10; i  )
    {
        for (int j = 0; j < 10; j  )
        {
            **WHAT I SHOULD PUT HERE**

        }
    }            
    reader.Close();
}
  

Ответ №1:

Вы должны выполнить следующее (код с моими комментариями):

 var map = new int[10, 10];

using (var reader = new StreamReader("Lode.txt"))  // using will call close automatically
{
    for (var i = 0; i < 10; i  )
    {
        var line = reader.ReadLine();  // read one line from file
        for (var j = 0; j < 10; j  )
        {
            map[i, j] = Int32.Parse(line[j].ToString());  // get one symbol from current line and convert it to int
        }
    }
}
  

Комментарии:

1. Ну, мое консольное приложение пусто после этого кода. Я не знаю, почему

2. что вы имеете в виду? вы пытались печатать map на консоль после инициализации?

3. Ну, может быть, я тупой, но я не знаю, как… Я совсем новичок

4. for (var i = 0; i < 10; i ) { for (var j = 0; j < 10; j ) { Консоль. Написать(сопоставить[i, j]); } Консоль. WriteLine(); }

5. Спасибо за помощь… Интересно, смогу ли я скрыть эту «игровую доску», и после попадания они появятся по отдельности.

Ответ №2:

Вы можете попробовать с небольшим LINQ следующим образом:

 static void Main(string[] args)
{
    string filePath = @"Lode.txt";

    // Read file contents and store it into a local variable
    string fileContents = File.ReadAllText(filePath);

    /* Split by CR-LF in a windows system, 
       then convert it into a list of chars 
       and then finally do a int.Parse on them
    */

    int[][] map = fileContents.Split('r', 'n')
                 .Select(x => x.ToList())
                 .Select(x => x.Select(y => int.Parse(new string(y, 1))).ToArray())
                 .ToArray();

}