none
Разобрать строковую переменную RRS feed

  • Вопрос

  • Господа доброго времени суток!!

    Прошу прошения за ламерский вопрос, возможно вопрос уже обсасывался но я не нашел (может плохо искал ?).
    Суть вопроса такова 
    пишу на vb.net (недавно)
    встрял с одной проблемой не могу своим умом понять как надо сделать 
    есть строковая переменная 
    например

    1.strPerem="vasya1=idiot igor1=molodets ivan1=psih vasya2=nonidiot igor2=razdolbai ivan2=mizhik"

    так вот мне надо чтобы моим переменным vVasya1 vVasya2 iIgor1 iIgor2 etc... присвоились требуемые значения 
    т.е.
    1.vVasya1=idiot
    2.vVasya2=nonidiot
    3.iIgor1=molodets
    4.iIgor2=razdolbai


    Заранее спасибо за помощь

    18 октября 2011 г. 7:22

Ответы

  • Здравствуйте.

    Используйте метод String.Split для разделения строки на пары ключ-значение, потом в цикле каждую пару разделяйте опять же, но уже на сам ключ и само значение. Данные скорее всего придется хранить в массиве, а не переменных.


    Для связи [mail]
    • Помечено в качестве ответа Abolmasov Dmitry 19 октября 2011 г. 8:30
    18 октября 2011 г. 9:27
  • Также можно используя регулярные выражения:

    Dictionary<string, string> variables = new Dictionary<string, string>();
    string str = "vasya1=idiot igor1=molodets ivan1=psih vasya2=nonidiot igor2=razdolbai ivan2=mizhik";
    Regex reg = new Regex(@"(\S+)=(\S+)", RegexOptions.Compiled);
                
    foreach (Match match in reg.Matches(str))
    {
         variables.Add(match.Groups[1].Value, match.Groups[2].Value);
    }
    
    Нужное значение переменной получаешь из словаря как variables["vasya1"]..

    • Помечено в качестве ответа Abolmasov Dmitry 20 октября 2011 г. 7:01
    20 октября 2011 г. 6:10

Все ответы

  • конечная цель такова 
    от "сервера" приходит сообщение в котором содержатся данные 
    эти данные надо вывести на форму

     

    имена тут приведены только как пример 
    на самом деле там будут совершенно другие данные
    в принципе переменные можно и не использовать а сразу выводить на форму - не принципиально 
    мне главное понять куда рыть и как организовать - а будут там переменные или нет дело уже второе

    все данные которые будут прилетать от "сервера" будут името одинаковый формат 
    различатся будут только кол-вом данных 
    т.е vasya igor ivan - и больше ничего будет варьироваться только кол-во 
    т.е
    vasya1 igor1 ivan1
    vasya2 igor2 ivan2
    vasya3 igor3 ivan3
    ..................
    vasyaN igorN ivanN 

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

    1.strPerem="vasya1=idiot# igor1=molodets# ivan1=psih# vasya2=nonidiot# igor2=razdolbai# ivan2=mizhik#"

    или например такой
    1.strPerem="vasya1=idiot <br> igor1=molodets <br> ivan1=psih <br> vasya2=nonidiot <br> igor2=razdolbai <br> ivan2=mizhik"

    в принципе она может быть и такой 
    1.strPerem="idiot molodets psih nonidiot razdolbai mizhik"

    и по "номеру" слова в строке я пойму что idiot - vasya1 а razdolbai - igor2 но такой варриант не подходит т.к. я не исключаю варрианта что может прийти строка вида 
    1.strPerem="vasya1=idiot igor1= ivan1=psih vasya2=nonidiot igor2=razdolbai ivan2="

    т.е. igor1 И ivan2 будут с пустыми значениями
    и кстати вспомнил вот еще что 
    искать и разделять както по пробелам - не вариант т.к. строка может прийти и такая 
    1.strPerem="vasya1=idiot igor1= ivan1=psih vasya2=nonidiot i ochen horoshiy chelovek igor2=neukliuzhii razdolbai ivan2="

    т.е. в переменную vVasya2 надо записать
    1.nonidiot i ochen horoshiy chelovek

    p.s.
    если быть сооовсем точным то данные будут такие 
    1.raion=9 name=Иванов Иван date=10.10.2011 12:33 lm1=11106046 ean1=4607172090585 prod_name1=уголок бел глянец 23х23мм 6м qty1=2 price1=10.26

    в каждой такой строке raion name date - встречаются только один раз 
    все остальные данные могут повторятся т.е. lm1, lm2, lm3, lm4, ean1, ean2, ean3, ean4, etc

    просто ИМХО на примере с именами проще объяснить и проще разобраться

     

    18 октября 2011 г. 7:22
  • Здравствуйте.

    Используйте метод String.Split для разделения строки на пары ключ-значение, потом в цикле каждую пару разделяйте опять же, но уже на сам ключ и само значение. Данные скорее всего придется хранить в массиве, а не переменных.


    Для связи [mail]
    • Помечено в качестве ответа Abolmasov Dmitry 19 октября 2011 г. 8:30
    18 октября 2011 г. 9:27
  • Спасибо !!

    Буду пробовать.

    по большому счету мне всеравно где хранить данные главное - это их разобрать.

    еще раз спасибо

     


    • Изменено Qtronix 18 октября 2011 г. 12:47
    18 октября 2011 г. 12:46
  • Также можно используя регулярные выражения:

    Dictionary<string, string> variables = new Dictionary<string, string>();
    string str = "vasya1=idiot igor1=molodets ivan1=psih vasya2=nonidiot igor2=razdolbai ivan2=mizhik";
    Regex reg = new Regex(@"(\S+)=(\S+)", RegexOptions.Compiled);
                
    foreach (Match match in reg.Matches(str))
    {
         variables.Add(match.Groups[1].Value, match.Groups[2].Value);
    }
    
    Нужное значение переменной получаешь из словаря как variables["vasya1"]..

    • Помечено в качестве ответа Abolmasov Dmitry 20 октября 2011 г. 7:01
    20 октября 2011 г. 6:10