2009-05-31 15 views
0

改行を含む文字列テキストがあれば、テキスト内の項目に一致する検索キーワードがあります。 。C#でテキスト内の検索文字列のコンテキストを取得する

searchIdx =検索インデックス(GetSearchContextに連続した各呼び出しのためなど、1その後、0から始まる最初は0

contextsTxt =文字列で始まる:私はC#で次のように実装するにはどうすればよい

contextsTxtで

NUMLINES = searchTxt(すなわち見出さ周囲返す行数を検索する

searchTxt =キーワードで検索するデータ。1 = searchTxtが上に見られるライン、2ラインにsearcを= hTxtラインsearchTxtが上に見られる= searchTxt上の行は、上に発見され、3に見出され、そしてsearchTxt下の行)は

が戻りパラメータに基づいて、「コンテキスト」に見出される

文字列GetSearchContext(int searchIdx、文字列contentsTxt、文字列searchTxt、int numLines);

これを実現するためのより良い機能のインターフェースがある場合は、それも同様に提案することができます。

私は次のことを試してみましたが、適切にすべての時間を動作するようには思えません。

private string GetSearchContext(string contentValue, string search, int numLines) 
    { 
     int searchIdx = contentValue.IndexOf(search); 

     int startIdx = 0; 
     int lastIdx = 0; 
     while (startIdx != -1 && (startIdx = contentValue.IndexOf('\n', startIdx+1)) < searchIdx) 
     { 
      lastIdx = startIdx; 
     } 

     startIdx = lastIdx; 

     if (startIdx < 0) 
      startIdx = 0; 

     int endIdx = searchIdx; 
     int lineCnt = 0; 

     while (endIdx != -1 && lineCnt++ < numLines) 
     { 
      endIdx = contentValue.IndexOf('\n', endIdx + 1); 
     } 

     if (endIdx == -1 || endIdx > contentValue.Length - 1) 
      endIdx = contentValue.Length - 1; 

     string lines = contentValue.Substring(startIdx, endIdx - startIdx + 1); 
     if (lines[0] == '\n') 
      lines = lines.Substring(1); 

     if (lines[lines.Length - 1] == '\n') 
     { 
      lines = lines.Substring(0, lines.Length - 1); 
     } 

     if (lines[lines.Length - 1] == '\r') 
     { 
      lines = lines.Substring(0, lines.Length - 1); 
     } 

     return lines; 
    } 
+0

これは宿題の問題ですか?そうであれば、あなたは正直で、これで実際の助けを得るかもしれません。さもなければ、私はちょうどあなたが望むことをするために、単にSystem.StringメソッドContains(String)を呼び出すようにアドバイスします。 – Josh

+0

あなたが探しているのはちょっと複雑ですが、改行の文字列を行の配列に分割し、検索文字列を探して各行を繰り返します。 – Josh

答えて

0

それは実際に宿題の質問はありません。私は個人的な検索エンジンを構築しようとしています。私はちょうど大文字と小文字を区別する検索のためにいつもうまくいかなかったのかという問題を今考え出しました。

StringComparison.CurrentCultureIgnoreCaseを追加するだけで、うまくいきました。私は投稿する前にそれを考えていないので気が気にならない。

関連する問題