2016-12-15 15 views
0

私のテーブルには、JavaScriptコードを含むカラム(nvarchar(max))があります。私の例で見ることができるように、私は1行に2つの別々のjavascript呼び出しを持っています。StringReaderは私の検索のすべてのインスタンスを見つける

1行目:

(<a href="Javascript:TermDef(1000,'','451')">aaa</a>)<LI> <a href="Javascript:TermDef(1100,'','26')">bbb</a> 

2行目:

(<a href="Javascript:TermDef(1200,'','551')">ccc</a>)<LI> <a href="Javascript:TermDef(1300,'','270')">ddd</a> 

私は、文字列をループされ、次にStringReaderコードを持っているが、それは唯一の第一のインスタンスを検索します。このコードは、1行につき1つのインスタンスだけが検索されている場合に効果的です。

using (StringReader rowData = new StringReader(reader[0].ToString())) 
{ 
    string line; 
    while ((line = rowData.ReadLine()) != null) 
    { 
     startVal = 0; 
     if (line.IndexOf("Javascript:TermDef", startVal) > -1) 
     { 
      startVal = line.IndexOf("Javascript:TermDef", startVal); 
      endVal = line.IndexOf(">", startVal); 
      value = line.Substring(startVal, endVal - startVal - 1); 
      Console.WriteLine(value); 
     } 
    } 
} 

「JavaScript:TermDef」のすべてのインスタンスを検索するにはどうすればよいですか?

+0

一度だけチェックするのではなく、 'startVal = endVal'を使用してループスルーします。 – Kateract

答えて

1

複数のインスタンスを検索するのは、開始引数が存在する理由です。開始値を更新してインスタンスが見つからなくなるまでループスルーすれば、すべてのインスタンスを見つけることができます。

using (StringReader rowData = new StringReader(reader[0].ToString())) 
{ 
    string line; 
    while ((line = rowData.ReadLine()) != null) 
    { 
     startVal = 0; 
     while (line.IndexOf("Javascript:TermDef", startVal) > -1) 
     { 
      startVal = line.IndexOf("Javascript:TermDef", startVal); 
      endVal = line.IndexOf(">", startVal); 
      value = line.Substring(startVal, endVal - startVal - 1); 
      Console.WriteLine(value); 
      startVal = endVal; 
     } 
    } 
} 
関連する問題