0

今私は方法を見つけるためにこれを持っています

def getMethod(text, a, filetype):
    start = a
    fin = a
    if filetype == "cs":
        for x in range(a, 0, -1):
            if text[x] == "{":
                start = x
                break
        for x in range(a, len(text)):
            if text[x] == "}":
                fin = x
                break
    return text[start:fin + 1]

インデックスが含まれているメソッドを取得するにはどうすればよいaですか?

私は見つけることができません{し、あなたがうまくいかない}ようなものを持つことができるからですnew { }

いくつかのメソッドを含むファイルがあり、x のインデックスが含まれているメソッドを見つけたい場合、たとえばファイルがある場合、そのメソッドの本体が必要です

private string x(){
    return "x";
}

private string b(){
    return "b";
}

private string z(){
    return "z";
}

private string a(){
    var n = new {l = "l"};
    return "a";
}

そして、「a」のインデックスを取得しました。これは100です

次に、そのメソッドの本体を見つけたいと思います。そのため、すべての内部{}

したがって、この...

{
    var n = new {l = "l"};
    return "a";
}

しかし、私が今持っているものを使用すると、次のように返されます:

                {l = "l"};
    return "a";
}
4

2 に答える 2

1

私の解釈が正しければ、ファイルa内の特定の位置を含む C# メソッドを見つけるために C# ソース コードを解析しようとしているようです。その内容は..cstext

残念ながら、完全かつ正確な仕事をしたいのであれば、完全なC# パーサーが必要になると思います。

それが大変な作業のように聞こえる場合は、C# と互換性のあるバージョンのctagsを使用してタグ ファイルを生成し、タグ ファイルを検索して、元のソース ファイル行ではなく特定のソース ファイル行に適用されるメソッドを検索することを検討します。ソースファイル。

于 2013-02-25T01:47:01.417 に答える
1

Simon が述べたように、問題がソース コードの解析である場合、最善の策はその言語に適したパーサーを入手することです。

ただし、中かっこを一致させたいだけの場合は、そのためのよく知られたアルゴリズムがあります: Python parsing bracketed blocks

ソース コードは複雑な獣であるため、これが 100% 機能するとは思わないでください。

于 2013-02-25T02:46:41.207 に答える