2014-03-04 30 views
0

我正在寻找最有效的方法来获取字符串的一部分,并使用HTML注释作为开始/结束点。返回带注释标记的字符串部分

因此,例如,我想用

<!-- START: Variable --> 

stuff goes here 

<!-- END: Variable --> 

该字符串应该只是东西在评论之间。我做了一个帮手,但对.net来说不是很好。

@helper readPattern(string filepath, string patternSection = null) { 

    TextReader tr = new StreamReader(filepath); 
    string SplitBy = "<!-- START: "+patternSection+" -->"; 

    string fullLog = tr.ReadToEnd(); 

    fullLog.Trim().StartsWith("<!-- " + patternSection+ " -->"); 

    //string[] sections = fullLog.Split(new string[] { SplitBy }, StringSplitOptions.RemoveEmptyEntries); 

    <div class="@patternSection">@fullLog</div> 
} 

我不需要拆呢,我只需要输出或由我通过这个助手的意见修剪。

+0

你可以使用子串2次 –

回答

0

你需要标记开始和结束,然后抓住它们之间的内容。该“之间”是从范围start + start string lengthend - (start + start string length)长度

@helper readPattern(string filepath, string patternSection = null) { 

    TextReader tr = new StreamReader(filepath); 
    String SplitBy = "<!-- START: "+patternSection+" -->"; 
    String EndBy = "<!-- END: "+patternSection+" -->"; 

    String fullLog = tr.ReadToEnd(); 

    int start = fullLog.IndexOf(SplitBy); 
    int end = fullLog.IndexOf(EndBy); 

    String data = fullLog.Substring(start + SplitBy.Length, end - (start + SplitBy.Length)); 

    <div class="@patternSection">@data</div> 
} 

你也想你的读者的Close/Dispose,顺便说一句。如果我的假设是正确的,而且这个帮助器一遍又一遍地使用相同的filepath,那么你会好起来缓存文件的内容,而不是一遍又一遍地读取每次调用不同的patternSection你致电。这将最终成为很多文件打开和关闭,否则静态文件。

+0

你会如何缓存它?你将如何关闭它,对不起,我是这个新手。我也收到数据字符串的错误,Splitby似乎不在上下文中 – thematt

+0

我有一个'Splitby'而不是'SplitBy'的错字。我提供的建议与我所能得到的一样好,但很抱歉,没有完全为您编写代码。 SO希望对手头任务有最少的了解。由于你的问题主要是关于在评论块之间获取数据,所以试着让我的代码正常工作,如果它满足你的需要,就将它标记为答案。然后,如果您还有其他问题,请打开董事会,看看您是否有答案;如果没有,请随时提出另一个问题。祝你好运! –