2011-10-24 15 views
0

でパラメータを見つける、私は私がパラメータを取得する方法を見つけようとしていますは、トークン(IndexOfメソッドまたはIndexOfAny)現在

using (StreamReader streamReader = new StreamReader(memoryStream)) 
{ 
    while ((CurrentLine = streamReader.ReadLine()) != null) 
    { 
     int startPos = CurrentLine.IndexOf("{:"); 
     int endPos = CurrentLine.LastIndexOf(":}"); 

     if (startPos > 0 && endPos > 0) 
     { 
      string xPathstr = CurrentLine.Substring(startPos + 2, (endPos - startPos - 2)); 

      XPathNodeIterator myXPathNodeIterator = myXPathNavigator.Select("/"+ xPathstr); 

      while (myXPathNodeIterator.MoveNext()) 
      { 
       Console.WriteLine(myXPathNodeIterator.Current.Value); 
       TemplateMemoryBuilder.Append(CurrentLine.Replace(CurrentLine.Substring(startPos, ((endPos + 2) - startPos)), myXPathNodeIterator.Current.Value)); 
       TemplateMemoryBuilder.Append(Environment.NewLine); 
      } 

     } 
     else 
     { 
      TemplateMemoryBuilder.Append(CurrentLine); 
      TemplateMemoryBuilder.Append(Environment.NewLine); 
     } 
    } 
} 

の下のように提供私のトークン内のXPathの値を取得することができました複数のタグのようなラインの中に発見された場合のタグで:

This is a test to merge item {:/MyTest/TestTwo/Text1:} and {:/MyTest/TestTwo/Text2:} on the same line. 

私は、このタスクを達成するためにIndexOfAnyメソッドを使用してもらえますか?私はこれを行う方法がわかりません。プログラムは、これが私に与えられたテストからの可能な結果であることがわかるまでうまくいきました。

答えて

1

あなたのトークンにマッチする正規表現を使うことができます。それはあなたのコードをもっと読みやすくします。

例正規表現と一致するコード

 var regex = new Regex("{:.+?}"); 
     var input = 
      "This is a test to merge item {:/MyTest/TestTwo/Text1:} and {:/MyTest/TestTwo/Text2:} on the same line."; 
     var matches = regex.Matches(input); 

は、インデックス操作と、(高価な)文字列操作せずに2本のマッチを見つけます。

+0

これはうまくいくでしょうが、私の書類にこれらのトークンがあり、直接入力されていないテンプレートファイルから読み込んでいるので、このルートは機能しますか? – nholloway4

+0

正規表現に文字列を入力できるように行単位で読み込んでいます – saintedlama

+0

上記のコードに基づいてRegExに文字列を入力する方法はありますか? – nholloway4

関連する問題