Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 01.10.2018
Сообщений: 9
1

Чтение матрицы и запись ее в двумерный массив

01.10.2018, 20:55. Показов 2857. Ответов 16

нужно считать матрицу из файла.txt и записать ее в двумерный массив, ее размер заранее не известен значения матрицы пишутся через пробел, каждая строка в итоге кончается пробелом
пример матрицы:

32 35 15
4 5 23
23 2 15
56 0 135
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.10.2018, 20:55
Ответы с готовыми решениями:

Чтение матрицы из файла и запись её в массив
Всем доброго времени суток, имеется файл 00011122331100 00000000000000 00012000000000...

Чтение матрицы и запись в файл
Считать матрицу из файла, найти минимальный элемент каждого столбца и записать результат в выходной...

Чтение значений типа int из файла в двумерный массив
Я написал вот такой код: public void OpenArray() // Чтение файла { ...

Запись строки в двумерный массив
Здравствуйте,запутался немного,как записать введенную строку пользователем в двумерный массив,так...

16
149 / 146 / 103
Регистрация: 30.10.2016
Сообщений: 312
01.10.2018, 22:29 2
Лучший ответ Сообщение было отмечено Xome4ok как решение

Решение

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
using System;
using System.IO;
using System.Linq;
 
namespace MatrixFromTXT
{
    internal class Program
    {
        private static void Main()
        {
            string matrixString;
 
            using (StreamReader streamReader = new StreamReader(@"d:\matrix.txt"))
            {
                matrixString = streamReader.ReadToEnd();
            }
 
            try
            {
                int[,] matrix = GetMatrixFromString(matrixString);
                PrintMatrix(matrix);
            }
            catch (ArgumentException ex)
            {
                Console.WriteLine(ex);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
            }
 
 
            Console.ReadLine();
        }
 
        private static int[,] GetMatrixFromString(string matrixString)
        {
            if (string.IsNullOrWhiteSpace(matrixString))
            {
                throw new ArgumentException("message", nameof(matrixString));
            }
 
            string[] lines = matrixString.Split('\n');
 
            int rowNumber = lines.Length;
            int columnNumber = lines.First().Split(' ').Length;
 
            int[,] matrix = new int[rowNumber, columnNumber];
 
            for (int i = 0; i < matrix.GetLength(0); i++)
            {
                string[] columns = lines[i].Split(' ');
 
                for (int j = 0; j < matrix.GetLength(1); j++)
                {
                    matrix[i, j] = int.Parse(columns[j]);
                }
            }
 
            return matrix;
        }
 
        private static void PrintMatrix(int[,] someMatrix)
        {
            for (int i = 0; i < someMatrix.GetLength(0); i++)
            {
                for (int j = 0; j < someMatrix.GetLength(1); j++)
                {
                    Console.Write("{0,3} ", someMatrix[i, j]);
                }
 
                Console.WriteLine();
            }
        }
    }
}
1
0 / 0 / 0
Регистрация: 01.10.2018
Сообщений: 9
01.10.2018, 22:43  [ТС] 3
все бы ничего, но не работает
0
Миниатюры
Чтение матрицы и запись ее в двумерный массив  
149 / 146 / 103
Регистрация: 30.10.2016
Сообщений: 312
01.10.2018, 22:49 4
Xome4ok, работает, если в файле верно записан массив. Для проверки вставьте массив из вашего условия.
И покажите, что там сейчас, я проверю.
0
0 / 0 / 0
Регистрация: 01.10.2018
Сообщений: 9
01.10.2018, 22:52  [ТС] 5
вот, массив записан с пробелами на конце каждой строки, как уточнялось ранее
0
Миниатюры
Чтение матрицы и запись ее в двумерный массив  
294 / 123 / 106
Регистрация: 30.10.2015
Сообщений: 690
01.10.2018, 23:04 6
Xome4ok,
C#
1
2
3
4
5
6
      var allLines = File.ReadAllLines("file.txt");
      var matrix = new int[allLines.Length][];
 
      for (int i = 0; i < allLines.Length; i++)
        matrix[i] = allLines[i].Split(" ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries)
          .Select(x => int.Parse(x)).ToArray();
0
149 / 146 / 103
Регистрация: 30.10.2016
Сообщений: 312
01.10.2018, 23:06 7
Лучший ответ Сообщение было отмечено Xome4ok как решение

Решение

Xome4ok, да, подвели пробелы в конце каждой строки. Попробуйте заменить 46 строку на
C#
1
int columnNumber = lines.First().Split(' ').Length - 1;
1
0 / 0 / 0
Регистрация: 01.10.2018
Сообщений: 9
01.10.2018, 23:08  [ТС] 8
Nemovok , это вроде как одномерный массив, не?
0
294 / 123 / 106
Регистрация: 30.10.2015
Сообщений: 690
01.10.2018, 23:10 9
Xome4ok, не
0
0 / 0 / 0
Регистрация: 01.10.2018
Сообщений: 9
01.10.2018, 23:13  [ТС] 10
willow300, результат похожий.
0
Миниатюры
Чтение матрицы и запись ее в двумерный массив  
0 / 0 / 0
Регистрация: 01.10.2018
Сообщений: 9
01.10.2018, 23:16  [ТС] 11
Nemovok, ваш код выводит в консоль, точнее пытается выводить первые 3 значения (то есть значения первой строки, а остальные нет)
0
149 / 146 / 103
Регистрация: 30.10.2016
Сообщений: 312
01.10.2018, 23:16 12
Xome4ok, проверьте, что у вас в конце каждой строки только один пробел и под массивом нет пустой строки.
0
Миниатюры
Чтение матрицы и запись ее в двумерный массив  
294 / 123 / 106
Регистрация: 30.10.2015
Сообщений: 690
01.10.2018, 23:18 13
Цитата Сообщение от Xome4ok Посмотреть сообщение
ваш код выводит в консоль
мой код ничего не выводит.

Добавлено через 1 минуту
Ведь для этого нужен такой метод:
C#
1
2
3
4
5
6
7
8
9
10
11
    static void ShowMatrix(int[][] matrix)
    {
      foreach (var line in matrix)
      {
        foreach (var element in line)
        {
          Console.Write(element + " ");
        }
        Console.WriteLine();
      }
    }
0
0 / 0 / 0
Регистрация: 01.10.2018
Сообщений: 9
01.10.2018, 23:20  [ТС] 14
willow300, прошу прощения, я не узрел пустую строку под массивом, спасибо Вам за помощь
0
Миниатюры
Чтение матрицы и запись ее в двумерный массив  
149 / 146 / 103
Регистрация: 30.10.2016
Сообщений: 312
01.10.2018, 23:21 15
Xome4ok, пожалуйста)
0
0 / 0 / 0
Регистрация: 01.10.2018
Сообщений: 9
01.10.2018, 23:36  [ТС] 16
willow300, Меня кстати тоже Максим зовут)
0
Модератор
Эксперт .NET
10079 / 7099 / 1957
Регистрация: 21.04.2018
Сообщений: 21,260
Записей в блоге: 2
01.10.2018, 23:55 17
Вот метод чтения из файла. Большая часть различные проверки.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
        #region Чтение матрицы и запись ее в двумерный массив
        static int[,] ReadMatrix(string file, char[] separators = null)
        {
            // Получение списка строк
            IEnumerable<string> Rows = File.ReadLines(file);
 
            // Преобразование строк в список подстрок
            if (separators == null) // Если не передавался список сепараторов, то он создаётся.
                separators = new char[] { ' ', '\t', '\\','/',':' };
            IEnumerable<List<string>> RowsSub
                        = Rows
                        .Select(row => new List<string> ( row.Split(separators, StringSplitOptions.RemoveEmptyEntries)));
            // Удаление пустых строк и подстрок, которые не преобразуются в целые числа
            // Преобразование в целые числа
            IEnumerable<List<int>> RowsListInt
                = RowsSub
                .Where(row => row.Count > 0)
                .Select(row => row
                                .Where(sub => int.TryParse(sub, out int a))
                                .Select(sub => int.Parse(sub))
                                .ToList()
                                );
 
            // Поверка количества элементов в строках, если не совпадает, то выход
            if (RowsListInt.Select(row => row.Count).Max() != RowsListInt.Select(row => row.Count).Min())
                return null;
 
            // Создание выходной матрицы 
            int[,] ret = new int[RowsListInt.Count(), RowsListInt.ElementAt(0).Count];
 
            // Запись значений в матрицу
            int Irow = 0;
            foreach (List<int> row in RowsListInt)
            {
                int Icol = 0;
                foreach(int cell in row)
                {
                    ret[Irow, Icol] = cell;
                    Icol++;
                }
                Irow++;
            }
            return ret;
        }
        #endregion
И пример как им пользоваться
C#
1
            int[,] МояМатрица = ReadMatrix("..\\..\\Матрица.scv");
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.10.2018, 23:55

Запись в двумерный массив из Split
Все эти строки приходят через post запрос 1'ой срокой! Их разделяет &quot;:&quot;. 0'вой элемент приходит...

Запись строки в двумерный массив
производится чтение файла типа: 6 2 012123101212210321123012212101321210...

Чтение из файла и запись в массив
Добрый день. Я застрял на приведении типов при чтении строки из файла и попытке записи ее элементов...

Чтение из файла и запись в массив
Доброго времени суток. Не получается записать содержимое файла в массив для поиска максимального...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.