将对象与源分离
本文关键字:分离 对象 | 更新日期: 2023-09-27 18:04:50
我目前正在尝试拆分一些用于在运行时更改应用程序行为的源。我必须解析它并动态执行它。我需要一种方法将源拆分为一个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
}
}
谢谢。
如果你认为你的代码在语法上是正确的(即它有正确数量的花括号(,你可以从下面的方法开始并改进它。它在你的代码中查找开括号和闭括号,跟踪开括号,并在每个开括号闭合后立即分离字符串。
您不能简单地使用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;
}
string strSource = @"Your code";
string objects = string.Split("object", StringSplitOptions.RemoveEmptyEntries);
使用字符串。Split((以获得您想要的。按关键字object
拆分。显然,这将取决于您的源代码示例是否正确,因为如果您的代码中有任何object
类型,它也会拆分这些类型。
如果你谷歌:
拆分字符串c#
以上就是你会发现的。只是需要一些研究。