語句を検索する
Azukiには文章を検索するためのメソッドが存在している。
AzukiControlの名前がazukiとして、以下のようにして文字を検索することができる。
先頭から末尾に向かって検索したい場合は、次のように書く。
azuki.Document.FindNext([検索語句string],[開始位置int],[大文字・小文字の区別bool]);
逆に、末尾から先頭に向かって検索したい場合は、次のように書く。
azuki.Document.FindPrev([検索語句string],[開始位置int],[大文字・小文字の区別bool]);
検索語句と同じ語句を探した末、TextSegmentという形式で結果を得る。
segmentという名前のTextSegment変数に、大文字と小文字を区別しない状態で、キャレット(カーソル)の位置から『こんにちは』という語句を検索して格納したい場合は、以下のように記述するとよい。
TextSegment segment = azuki.Document.FindNext("こんにちは",azuki.CaretIndex,false]);
TextSegmentには、さまざまなintが格納される。
segment.Beginに検索した語句の先頭位置にあたるint。
segment.Endに検索した語句の末尾位置にあたるint。
segment.Lengthに検索した語句の文字数にあたるint。
この、取得したTextSegmentをもとに語句を選択したい場合は
azuki.SetSelection(segment.Begin,segment.End);
……と書けばいいだけなので、ものすごくラク。
ちなみに末尾から検索して末尾から選択したい場合は、上記した中のBeginとEndの位置をひっくり返せばよい。
それから、FintNextとFindPrevには正規表現も使うことができる。
語句の置換と削除
Azukiは、Textに対してやる置換命令のReplaceにおける動作は普通なんだけど、Documentに対するReplaceは少々異なる動きをする。
たとえば、azukiという名前のAzukiControlに対して、『ポッキー』という語句を『プリッツ』に書き換えたい場合。
Text相手だとこんなかんじ。
azuki.Text.Replace("ポッキー","プリッツ");
と、このように、なんのへんてつもない普通のReplaceとして書いて動作させる。
これがDocumentを相手にすると、こんな記述になる。
azuki.Document.Replace("プリッツ",[置換する先頭の位置int],[置換する末尾の位置int]);
そうなんです。指定範囲を置換する仕様。
なのであらかじめポッキーの位置をFindNextなりFindPrevなりでTextSegmentに格納してからやると、やりやすい。
ここでもTextSegmentは便利。segment.Beginとsegment.Endで先頭位置と末尾位置を指定できるので。
削除も同じ命令を使ってやるようになっているみたいで、削除したいときはこの"プリッツ"を""にすると実質、範囲の削除になる。
コメント
最新を表示する
NG表示方式
NGID一覧