Динамический парсинг строки в C#

105
30 декабря 2020, 09:20

Есть строка вот такого типа:

Диагональ экрана: 32 ''; Соотношение сторон экрана: 16:9; Разрешение экрана: 1366x768; Технология экрана: ЖК; Частота обновления экрана: 50 Гц; TV-тюнер: DVB-T2, DVB-S2; Smart TV: есть; Мощность звука: 16 Вт; Разъемы вход и выход: HDMIx2, USBx2, Wi-Fi, Ethernet-LAN RJ-45, CI+, под наушники; Класс энергопотребления: A+; Поддержка 3D: нет; Цвет: черный; Крепление VESA: 100x100; 

Нужно парсить строку по ":" и первое значение заносить в одно поле класса, а второе - в другое. Окончанием является ";".

Каким образом можно это сделать? Читал про split, но не понял как в цикле foreach распознать где первая половина строки, а где второе нужное значение.

Answer 1
string str = "...";
string[] semicolonPairs = str.Split(new char[]{';'}, StringSplitOptions.RemoveEmptyEntries);
for(int i = 0; i < semicolonPairs.Length; i++) {
    string t = semicolonPairs[i].Trim();
    if(t.Length > 0){
        string[] pair = t.Split(new char[]{':'}, 2);
        Console.WriteLine("name: " + pair[0] + ", value: " + pair[1]);
    }
}

Можете "поиграться" здесь.

Аналог на JS.

var str = "Диагональ экрана: 32 ''; Соотношение сторон экрана: 16:9; Разрешение экрана: 1366x768; Технология экрана: ЖК; Частота обновления экрана: 50 Гц; TV-тюнер: DVB-T2, DVB-S2; Smart TV: есть; Мощность звука: 16 Вт; Разъемы вход и выход: HDMIx2, USBx2, Wi-Fi, Ethernet-LAN RJ-45, CI+, под наушники; Класс энергопотребления: A+; Поддержка 3D: нет; Цвет: черный; Крепление VESA: 100x100;"; 
 
var semiColonPairs = str.split(";"); 
for(var i = 0, sep = ":"; i < semiColonPairs.length; i++) { 
  var pair = semiColonPairs[i].split(sep); 
  if(pair.length > 1){ 
    var name = pair.shift().trim(); 
    var value = pair.join(sep).trim(); 
    console.log("%o = %o", name, value); 
  } 
}

READ ALSO
Как отправить файл в телеграм бот?

Как отправить файл в телеграм бот?

Подскажите пожалуйста в интернете не нашёл как отправить любой файл форматаtxt,

179
Шифрование WPF SQLSERVER Entity Framework

Шифрование WPF SQLSERVER Entity Framework

есть клиент серверное приложение на wpf c# с использованием Entity Framework и Sql Server, нужно зашифровать данные с помощью sql server ( да там есть выбор даже...

143
C# создание и печать файла

C# создание и печать файла

На работе постоянно приходится печатать маленькие этикетки для грузаНа данный момент заполняется excel таблица и печатается нужное количество...

120
Почему я не могу задать минимальную высоту в GUI.BOX

Почему я не могу задать минимальную высоту в GUI.BOX

Я хочу сделать полоску над врагом, получается вот это:

131