Работа на консоли.Напишите форматирование строки с помощью

#c# #arrays #client-server #string-formatting

#c# #массивы #клиент-сервер #форматирование строки

Вопрос:

В настоящее время я работаю над этим своим примером кода, в котором я хочу отобразить массив чисел, поступающих с сервера на экран клиента.

По сути, я сначала заставляю сервер создать массив из 99 случайно сгенерированных чисел, значения которых находятся в диапазоне от 1 до 100, преобразую массив в строку, а затем передаю строку на сервер, используя байтовую отправку.

Код выглядит следующим образом:

 //SERVER
int[] result = GenerateNumbers();
string resultingString = "";
for (int i = 0; i < result.Length; i  )
     resultingString = resultingString   result[i]   ",";
s.Send(asen.GetBytes(resultingString));

//CLIENT
byte[] bb = new byte[1000];
int k = stm.Read(bb, 0, 1000);

for (int i = 0; i < k; i  )
{
     Console.Write(Convert.ToChar(bb[i]));
}
  

Теперь то, что я хочу сделать, это показать результирующий массив на экране клиента. Мой код в настоящее время может это сделать. Однако с помощью Console.Write() команды она непрерывно отображает строку до тех пор, пока она не закончится. Как в примере ниже:

 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ... 93 94 95 96 97 98 99
  

Что я хочу сделать сейчас, так это отформатировать отображение следующим образом:

  1  2  3  4  5  6  7  8  9 10
11 12 13 14 15 16 17 18 19 20
21 22 23  . . . . . . . . . . 
90 91 92 93 94 95 96 97 98 99
  

Может кто-нибудь, пожалуйста, указать мне хороший способ сделать это? 🙂

Ответ №1:

Строка.Вам нужен PadLeft — это то, что вам нужно — это заполнит левую часть заданной строки, чтобы сделать ее длиной в n символов, используя символ заполнения по вашему выбору.

Чтобы разбить каждое n-е число, которое вам нужно (после вашей консоли.Пишу(…);):

 if((i % n) == 0) {
  Console.WriteLine();
}
  

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

1. спасибо за это! но как насчет разрывов? Я хочу прерывать запись строки после каждого 20-го числа.

Ответ №2:

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

 //CLIENT
//Makes an array to hold stream content
var bb = new byte[stm.Length];
//Fill the array with the stream content
stm.Read(bb, 0, (int)stm.Length);
//Converts the array of bytes back to a string
var rcvString = System.Text.UTF8Encoding.UTF8.GetString(bb);
//Split the string into an array using "," as separator
var array = rcvString.Split(new string[]{","}, 
    StringSplitOptions.RemoveEmptyEntries);
var pad = 2;   
var inc = 20;
var max = array.Length;
//Iterates through the array in "inc" intervals                        
for (var i = 0; i < max; i =inc)
{
    //Iterates through a section of the array determined by "i" and "inc" 
    //(there is a special case if "inc" it's not a multiple of max)
    for (var j = 0; j < (max - i > inc ? inc : max - i); j  = 1)
    {
        Console.Write(String.Format(@" {0}",array[i   j].PadLeft(pad)));
    }
    Console.WriteLine();
}
  

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

1. Очень полно 🙂 вы могли бы изменить n для записи на консоль. Строка записи? Или Environment.NewLine?

Ответ №3:

Используйте консоль.Метод WriteLine для перехода к новой строке по соответствующему значению..