我在C#中的函數,發現在源文件中,如C#字符串幫助?
function void MyFunc
我試圖創建後「空缺」開頭的字符串函數的名字,我需要找到的長度函數的名稱。函數名稱後面總會有空格或換行符。
module MyApplication
[EntryPoint]
function void main
write("a string")
endfunction
endmodule
我在C#中的函數,發現在源文件中,如C#字符串幫助?
function void MyFunc
我試圖創建後「空缺」開頭的字符串函數的名字,我需要找到的長度函數的名稱。函數名稱後面總會有空格或換行符。
module MyApplication
[EntryPoint]
function void main
write("a string")
endfunction
endmodule
您可以使用LastIndexOf
找到最後的空間,並抓住以下命令獲取函數名字符串的一部分。然後使用Length
屬性來獲取代碼的長度:
var s = "function void MyFunc "; // example string
var s2 = s.Trim(); // remove any extra spaces at the end
var funcName = s2.Substring(s2.LastIndexOf(' ') + 1); // 'MyFunc'
var length = funcName.Length; // 6
我假設函數名稱可能有其他的東西后,像一個參數列表。
你想要做的是尋找單詞「空白」,過去它,找到第一個非空格字符(這是函數名的開頭),然後去下一個空格或結束線。
您可以使用:
const string LookFor = "void "; // note space at end.
string GetFunctionName(string line)
{
int voidPos = line.IndexOf(LookFor);
if (voidPos == -1)
return null;
int functionStart = voidPos + LookFor.Length;
int spacePos = line.IndexOf(' ', functionStart);
if (spacePos == -1)
spacePos = line.Length;
return line.Substring(functionStart, spacePos - functionStart);
}
我如何從一個大的源文件中獲取該行?多行。 – tr0yspradling
@ Tr0y:要逐行讀取文件,請查看「File.ReadLines」。正如'foreach(File.ReadLines(filename)中的字符串行)' –
這就是 「哭了使用正則表達式」。試試這個:
Regex regex = new Regex("(function void){1,1}(?<functionName>^\w*)");
'^ \ w *'做了什麼?這不符合沒有函數名稱的行嗎?也就是'function void',沒有任何內容。你是否意指'\ w +'? –
Sprache能做到這一點,但你需要編寫一個語法整個文件,因爲它沒有實現「搜索」的比賽。
沿着這些線的某些內容會解析只是函數聲明 - 如上所述,爲了使您的方案工作,您需要爲模塊添加規則等等。
var identifier = (from first in Parse.Letter
from rest in Parse.LetterOrDigit.Many().Text()
select first + rest).Token();
var returnType = Parse.String("void").Or(Parse.String("int")).Token();
var functionKeyword = Parse.String("function").Token();
var endFunctionKeyword = Parse.String("endfunction").Token();
var function = from fk in functionKeyword
from rt in returnType
from functionName in identifier
from body in Parse.AnyChar.Until(endFunctionKeyword)
select functionName;
var name = function.Parse("function void main write(\"a string\") endfunction");
變量name
上面會包含字符串"main"
(除非我做了一些錯別字:))
SPRACHE有點比正則表達式更強大,但並不需要任何特殊的建設 - 實時處理。有關從Sprache主頁鏈接的這種方法的一些教程。
文件中的文字是什麼語言?我們可以假設名稱遵循與C#中相同的規則嗎? –
你是什麼意思? – tr0yspradling
@Troy:我的意思是源文件的規則是什麼?哪些字符可能出現在有效的函數名稱中?它看起來不像C#,所以我不知道我允許做什麼假設。例如,我可以假定函數名稱不能包含空格嗎? –