#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 для перехода к новой строке по соответствующему значению..