Разделение строки на 3 разных массива - PullRequest
1 голос
/ 29 апреля 2019

Я получаю строковый ответ от последовательного порта, и этот ответ содержит 3 разных значения.Каждое значение отделяется ';'.Например;

10;155.4587;0.01

Мне нужно отделить эти значения и добавить в поле Listview.

Я нашел примеры функции Split(';'), но я думаю, что невозможно назначитьразделение значений на разные массивы.

Есть ли способ выполнить это извлечение с использованием / без использования функции split ()?

Заранее спасибо за любую помощь.

Ответы [ 5 ]

1 голос
/ 29 апреля 2019

РЕДАКТИРОВАТЬ Чтобы добавить только один элемент представления списка, используйте:

 var s = "10;155.4587;0.01";
 var values = s.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries);

 var listViewItem = new ListViewItem(values[0]);
 listViewItem.SubItems.Add(values[1]);
 listViewItem.SubItems.Add(values[2]);
 listView1.Items.Add(listViewItem);

Если у вас есть несколько строк для заполнения списка, попробуйте:

         ListView listView1 = new ListView();
         listView1.Bounds = new Rectangle(new Point(10, 10), new Size(300, 200));
         listView1.View = View.Details;
         listView1.GridLines = true;
         listView1.Columns.Add("TD");
         listView1.Columns.Add("AD");
         listView1.Columns.Add("CT", -2);
         var sValues = new string[] { "10;155.4587;0.01", "11;156.4587;0.02", "12;157.4587;0.03" };
         var values = sValues.Select(x => x.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries))
                           .Select(x =>
                           {
                              var listViewItem = new ListViewItem(x[0]);
                              listViewItem.SubItems.Add(x[1]);
                              listViewItem.SubItems.Add(x[2]);
                              return listViewItem;
                           });
         listView1.Items.AddRange(values.ToArray());
1 голос
/ 29 апреля 2019

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

Вы можете сделать что-то более простое, например, манипулировать приведенным ниже примером:

string s = "10;155.4587;0.01";
string[] a = new String[1];
string[] b = new String[1];
string[] c = new String[1];

string[] z = s.Split(';');

for(int i=0; i< z.Length; i++)
{
    switch(i)
    {
        case 0:
            a[0] = z[i];
            break;
        case 1:
            b[0] = z[i];
            break;
        case 2:
            c[0] = z[i];
            break;

    }
}

Console.WriteLine(a[0] + ' ' + b[0] + ' ' + c[0]);

Выше показано, как манипулировать элементами, но оно не очень хорошо масштабируется. Возможно, вы захотите продолжить анонимный маршрут с первым комментарием, используя лямбды (см. Ответ mukesh kudi).

0 голосов
/ 02 мая 2019

Спасибо за помощь. С предложением @Captain Wibble я успешно расшифровал свои ответы и добавил в элемент списка.

Вот что я сделал для тех, у кого такие же проблемы; Сначала я добавил свои пакеты данных "\ r \ n"

10; 12,2345; 0,01 \ г \ п

Я использовал;

serial.ReadLine ()

Функция для получения входящих данных. Для декодирования и сохранения данных в объект списка я использую;

     var s = text;
        string[] a = new String[3];
        //string[] b = new String[1];
        //string[] c = new String[1];

        string[] z = s.Split(';');

        for (int i = 0; i < z.Length; i++)
        {
            switch (i)
            {
                case 0:
                    a[0] = z[i];
                    break;
                case 1:
                    a[1] = z[i];
                    break;
                case 2:
                    a[2] = z[i];
                    break;

            }
        }

        itm = new ListViewItem(a);
        listView5.Items.Add(itm);
0 голосов
/ 29 апреля 2019

Предполагая массив входных строк ...

        string[] a1 = new string[] {
            "10; 155.4587; 0.01",
            "20; 255.4587; 0.02",
            "30; 355.4587; 0.03",
        };

        List<string> r1 = new List<string>();
        List<string> r2 = new List<string>();
        List<string> r3 = new List<string>();

        foreach (string t1 in a1)
        {
            string[] t2 = t1.Split(";");
            r1.Add(t2[0]);
            r2.Add(t2[1]);
            r3.Add(t2[2]);
        }
0 голосов
/ 29 апреля 2019

Вы можете получить это с помощью linq ...

string s = "10;155.4587;0.01";
var arrList = s.Split(';').Select(x => new string[] { x }).ToArray();

Здесь arrList содержит три массива.но я не уверен, как это поможет вам.если вы хотите связать этот результат с ListView, вы должны пройти эту коллекцию и получить каждое значение массива и связать с listview.Вы можете сделать это с одним массивом, пройдя по его индексам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...