2014-03-04 71 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希望對手頭任務有最少的瞭解。由於你的問題主要是關於在評論塊之間獲取數據,所以試着讓我的代碼正常工作,如果它滿足你的需要,就將它標記爲答案。然後,如果您還有其他問題,請打開董事會,看看您是否有答案;如果沒有,請隨時提出另一個問題。祝你好運! –