我在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#,所以我不知道我允许做什么假设。例如,我可以假定函数名称不能包含空格吗? –