-2

現在、実行時にアプリケーションの動作を変更するために使用されるソースを分割しようとしています。それを解析して動的に実行する必要があります。ソースを のリストに分割する方法が必要ですobject。スクリプトの例を次に示します。

ソースを解析するために、ソースをさまざまな部分に分割しようとしています。

これは、アプリのテキスト ボックスに入力された単一のソース文字列です。

object obj1 {

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

}

object obj2 {

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

}

それらを次のような2つの文字列に分割する必要があります

文字列 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

コードが構文的に正しい(つまり、中括弧の数が正しい)と思われる場合は、次の方法から始めて、コードを改善することができます。コード内の開き角かっこと閉じ角かっこを探し、開いた角かっこを追跡し、開いた角かっこがすべて閉じられるとすぐに文字列を分離します。

使用しているトークン(オブジェクトなど)がセパレータとしてだけでなく使用されるとすぐには機能しないため、単純に分割を使用することはできません。

    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 に答える
0
string strSource = @"Your code";
string objects = string.Split("object", StringSplitOptions.RemoveEmptyEntries);

string.Split()を使用して、必要なものを取得します。キーワードで分割しobjectます。明らかに、これはソースコードの例が正しいことに依存しますobject。コードに型があると、それらも分割されるためです。

あなたがグーグルなら:

文字列を分割するC#

上記はあなたが見つけるものです。ちょっとした研究が必要です。

于 2013-03-19T09:12:30.517 に答える