2013-03-19 3 views
-2

В настоящее время я пытаюсь разбить источник, который используется для изменения поведения моего приложения во время выполнения. Мне придется разобрать его и выполнить его динамически. Мне нужен способ разделить источник на список object. Вот пример скрипта.Отделив объекты от источника

Я пытаюсь разделить источник на разные части для его разбора.

Вот одна строка источника, которая вводится в текстовое поле в моем приложении.

object obj1 { 

    event onCreate { 
     set name "OBJ1" 
     set x 150 
    } 

} 

object obj2 { 

    event onCreate { 
     set name "OBJ2" 
     set x 50 
    } 

} 

мне нужно разделить их на две строки, такие как

струнной obj1

object obj1 { 

    event onCreate { 
     set name "OBJ1" 
     set x 150 
    } 

} 

строка obj2

object obj2 { 

    event onCreate { 
     set name "OBJ2" 
     set x 50 
    } 

} 

Спасибо.

+0

«раскол какого-то источника» как? – TalentTuner

+0

Можете ли вы попробовать расширить свой исходный пост? Не совсем понятно, что вы пытаетесь и что вы уже пробовали. –

+0

@Saurabh Объекты должны быть разделены на отдельные строки. –

ответ

0

Если вы считаете, что ваш код синтаксически корректен (т. Е. Он имеет правильное количество фигурных скобок), вы можете начать с чего-то вроде следующего метода и улучшить его. Он ищет открывающие и закрывающие скобки в вашем коде, сохраняя след открытых скобок и разделяя строку, как только каждая открытая скобка была закрыта.

Вы не можете просто использовать Split, так как он не будет работать, как только маркер, который вы используете (например, объект), используется не только как разделитель.

public List<string> Split(string src) 
    { 
     List<string> result = new List<string>(); 
     int brk = src.IndexOf('{'); 
     if (brk < 0) 
     { 
      if (!string.IsNullOrEmpty(src.Trim())) 
       result.Add(src); 
      return result; 
     } 
     string cur = src.Substring(0, brk + 1); 
     string remainder = src.Substring(brk + 1); 
     int countBrk = 1; 
     while (countBrk > 0) 
     { 
      int idxOpened = remainder.IndexOf('{'); 
      int idxClosed = remainder.IndexOf('}'); 
      if (idxOpened >= 0 && idxOpened < idxClosed) 
      { 
       countBrk++; 
       cur = cur + remainder.Substring(0, idxOpened + 1); 
       remainder = remainder.Substring(idxOpened + 1); 
      } 
      else 
      { 
       countBrk--; 
       cur = cur + remainder.Substring(0, idxClosed + 1); 
       remainder = remainder.Substring(idxClosed + 1); 
      } 
     } 
     if (!string.IsNullOrEmpty(cur.Trim())) 
      result.Add(cur); 
     result.AddRange(Split(remainder)); 
     return result; 
    } 
0
string strSource = @"Your code"; 
string objects = string.Split("object", StringSplitOptions.RemoveEmptyEntries); 

Используйте string.Split(), чтобы получить то, что вы хотите. Разделить по ключевому слову object. Очевидно, что это будет полагаться на пример исходного кода, потому что, если у вас есть какие-либо object типов в вашем коде, это также разделило бы их.

Если Google:

Разбивает строку с #

Выше, что вы найдете. Просто немного исследований.

Смежные вопросы