0

検索しても解決策を見つけることができなかったので、固有の問題がある可能性があると思います。基本的に、私は妻のためにc#.NETで遺伝子検索/作成アプリケーションを作成しており、RichTextBoxesを使用して、必要な情報を強調表示、色付け、エクスポートなどできるようにしています。Microsoft の RichTextBoxes は想像力に委ねられているので、いくつかのカスタム メソッドを作成しました。

とにかく、ここに私の問題があります。ハードリターン全体で用語を検索できる必要があります。ユーザーは 60 文字間隔の文字列を持っており、そのハード リターン バリアを越える可能性のあるアイテムを検索する必要があります。たとえば、2 行あるとします (簡単にするために短くします): AAATTTCCCGGG TTTCCCGGGAAA

ユーザーが GGGTTT の検索を実行した場合、改行/ハード リターンがあっても結果を取得できる必要があります。私の人生では、これを行う良い方法を考えることはできず、それでもRichTextBoxで結果を選択します。私はいつでも結果を見つけることができますが、RichTextBox の適切なインデックスを取得することはできません。

必要に応じて、richTextBox.SaveFile() と LoadFile() に反対し、手動で rtf テキストを文字列として解析することには反対しません。きれいである必要はありません。この場合は、機能する必要があります。

あなたが与えるかもしれない助け/指導に感謝します。

関連するスニペットは次のとおりです。

        //textbox 2 search area (examination area)
    private void button5_Click(object sender, EventArgs e)
    {

        textBox3.Text = textBox3.Text.ToUpper();
        if (textBox3.Text.Length > 0)
        {
            List<string> lines = richTextBox2.Lines.ToList();
            string allText = "";
            foreach (string line in lines)
                allText = allText + line.Replace("\r", "").Replace("\n", "");
            if (findMultiLineRTB2(allText, textBox3.Text) != -1)
            {
                richTextBox2.Select(lastMatchForRTB2, textBox3.Text.Length);
                richTextBox2.SelectionColor = System.Drawing.Color.White;
                richTextBox2.SelectionBackColor = System.Drawing.Color.Blue;
            }//end if
            else
                MessageBox.Show("Reached the end of the sequence", "Finished Searching");
        }//end if
    }//end method

    private int findMultiLineRTB2(string rtbText, string searchString)
    {
        lastMatchForRTB2 = rtbText.IndexOf(searchString, lastMatchForRTB2 + 1);
        return lastMatchForRTB2;
    }
4

1 に答える 1

1

だから私は仮定をします:各行が60文字の長さのすべての行で単語を検索したいとします。目的の結果は、その単語のインデックスです。

string.Joinたとえば、次のように、改行のない文字列を作成するだけです。

string allText = string.Join("", richTextBox.Lines);
int indexOf = allText.IndexOf("GGGTTT");  // 9 in your sample
于 2013-10-15T15:38:58.863 に答える