-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
    }

}

谢谢。

4

2 回答 2

0
string strSource = @"Your code";
string objects = string.Split("object", StringSplitOptions.RemoveEmptyEntries);

使用string.Split()得到你想要的。按关键字拆分object。显然,这将取决于您的源代码示例是否正确,因为如果您object的代码中有任何类型,它也会拆分这些类型。

如果你谷歌:

拆分字符串 c#

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

于 2013-03-19T09:12:30.517 回答
0

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

您不能简单地使用拆分,因为一旦您使用的标记(例如对象)不仅用作分隔符,它就不会起作用。

    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;
    }
于 2013-03-19T09:34:45.890 回答