Leonardo Guimarães Ответов: 2

Считывание матрицы и отображение в виде таблицы - проблемы с выполнением метода для нее - C#


Я пытался обойти этот метод, но результат, который я получаю, это не то, что мне нужно.

Когда программа запускается в main, я вставляю данные в массив и после этого должен иметь возможность создать таблицу, добавляя данные внутри. Проблема в том, чтобы получить действительно плохое форматирование. Может ли кто-нибудь сказать, в чем проблема метода LISTDATA<t>? А вот этого у меня нет.

Извините, если я забыл какую-то полезную информацию, и спасибо, что посмотрели.

Что я уже пробовал:

public class Program
{
    private static void Main()
    {
        var client = new string[4, 7];
        InsertData<clientheader>(client);

        Console.Clear();
        InsertData<clientheader>(client);

        listData<clientheader>(client);
        Console.ReadKey();
    }

    static void showHeader<t>(string[,] matrix)
    {
        string line = new String('-', 83);
        int[] size = new int[] { 4, 10, 10, 15, 10, 10, 15 };
        Console.WriteLine(line);
        Console.Write("|");
        for (int i = 0; i < matrix.GetLength(1) - 1; i++)
        {
            string space = new String(' ', size[i] - GetHeader<t>(i).Length);
            string header = GetHeader<t>(i);
            Console.Write($"{header.ToUpper()}{space}");
            Console.Write("|");
        }
        Console.WriteLine();
    }

    static void listData<t>(string[,] matrix)
    {
        Console.Clear();
        showHeader<t>(matrix);

        string line = new String('-', 83);
        int[] size = new int[] { 10, 15, 15, 15, 15, 15, 15 };

        for (int i = 0; i < matrix.GetLength(0); i++)
        {
            Console.WriteLine(line);
            Console.Write("|");
            for (int j = 0; j < matrix.GetLength(1) - 1; j++)
            {
                if (matrix[i, j] == null) matrix[i, j] = "";
                string space = new String(' ', size[i] - matrix[i, j].Length - 1);
                Console.Write($"{matrix[i, j]}{space}");
                Console.Write("|");
            }
            Console.WriteLine();
        }
        Console.WriteLine(line);
    }

    static int getInsertIndex(string[,] matrix)
    {
        for (int j = 0; j < matrix.GetLength(0); j++)
        {
            if (string.IsNullOrEmpty(matrix[j, 0])) return j;
        }

        return -1;
    }

    private static void InsertData<t>(string[,] matrix)
    {
        int n = getInsertIndex(matrix), id = 1;

        matrix[n, 0] = Convert.ToString(id++);
        int x = matrix.GetLength(1) - 1;

        for (var j = 1; j < matrix.GetLength(1); j++)
        {
            do
            {
                Console.Write($"\nInsert {GetHeader<t>(j)}: ");
                matrix[n, j] = Console.ReadLine();
            } while (string.IsNullOrEmpty(matrix[0, j]));
        }
    }

    private static string GetHeader<t>(int i) => Enum.GetName(typeof(T), i);

    enum ClientHeader { Id, Name, Surname, Addres, CodPostal, Telephone, Email, State };


    }
}

Nelek

Что вы имеете в виду под "плохим оформлением"? Это плохой формат или плохая формация?
А чего ты ждешь? Что ты получаешь?

2 Ответов

Рейтинг:
2

Richard MacCutchan

Это всего лишь предположение, поскольку вы не объяснили проблему. Но вам, вероятно, нужно использовать настройки ширины поля и, возможно, выравнивания, чтобы все ваши значения выстроились в столбцы. Видеть $ - строковая интерполяция (ссылка на C#) | Microsoft Docs[^].


Leonardo Guimarães

Извините, если я не был ясен, но проблема в том, что мне нужно вывести матрицу, такую как таблица, и я не получаю ее в качестве вывода, даже если я не знаю почему

Richard MacCutchan

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

Попробуйте записать детали на бумаге, а затем решить, какой ширины должна быть каждая колонка, выровнено ли содержимое по левому или правому краю и т. д. Как только вы это сделаете, вы сможете выяснить детали для ваших строк формата.

Рейтинг:
1

Leonardo Guimarães

-------------------------------------------------------------------------
|    Column 1     |    Column 2     |    Column 3     |    Column 4     |
-------------------------------------------------------------------------
|                 |                 |                 |                 |
|                 |                 |                 |                 |
|                 |                 |                 |                 |
-------------------------------------------------------------------------


Я хочу что-то вроде этого, также с матричными данными внутри....


Richard MacCutchan

Итак, теперь у вас есть свой шаблон, вам просто нужно подсчитать ширину каждого поля и использовать эти значения в строках формата.

Leonardo Guimarães

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

Richard MacCutchan

Тогда вы делаете что-то неправильное, но мы не можем догадаться, что именно. Форматирование текста для вывода на консоль очень просто, потому что консоли используют символы фиксированной ширины. Что бы вы ни делали, ваши настройки ширины поля должны быть неправильными.