C# 从源中分离对象

C# 从源中分离对象,c#,C#,我目前正在尝试拆分一些用于在运行时更改应用程序行为的源。我必须解析它并动态执行它。我需要一种方法将源代码拆分为对象的列表。下面是一个示例脚本 我试图将源代码分成不同的部分进行解析 这里有一个单一的源字符串,它被输入到我的应用程序的文本框中 object obj1 { event onCreate { set name "OBJ1" set x 150 } } object obj2 { event onCreate {

我目前正在尝试拆分一些用于在运行时更改应用程序行为的源。我必须解析它并动态执行它。我需要一种方法将源代码拆分为
对象的列表
。下面是一个示例脚本

我试图将源代码分成不同的部分进行解析

这里有一个单一的源字符串,它被输入到我的应用程序的文本框中

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
    }

}
谢谢

string strSource = @"Your code";
string objects = string.Split("object", StringSplitOptions.RemoveEmptyEntries);
用来得到你想要的。按关键字
对象拆分
。显然,这取决于源代码示例是否正确,因为如果代码中有任何
对象
类型,它也会分割这些类型

如果你在谷歌上搜索:

拆分字符串c#


以上就是你会发现的。只需要做一点研究。

如果您认为您的代码在语法上是正确的(即,它有正确数量的花括号),您可以从以下方法开始并改进它。它在代码中查找开始括号和结束括号,跟踪打开的括号,并在关闭每个打开的括号后立即分离字符串

您不能简单地使用Split,因为只要您使用的令牌(例如object)不仅仅用作分隔符,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;
    }
公共列表拆分(字符串src)
{
列表结果=新列表();
int brk=src.IndexOf('{');
如果(brk<0)
{
如果(!string.IsNullOrEmpty(src.Trim()))
结果:添加(src);
返回结果;
}
字符串cur=src.Substring(0,brk+1);
字符串余数=src.子字符串(brk+1);
int countBrk=1;
while(countBrk>0)
{
int idxOpened=余数.IndexOf('{');
int idxClosed=rements.IndexOf('}');
如果(idxOpened>=0&&idxOpened
“拆分某些源”怎么做?你能试着在你原来的帖子上展开吗?你在尝试什么和你已经尝试了什么还不是很清楚。@Saurabh这些对象应该被划分成单独的字符串。我无法理解任何人是如何理解这里的问题的。你具体在做什么?因此,你可以解析并动态执行事件处理源代码,但仍然不知道如何按关键字拆分文本?