- ベストアンサー
vb配列の再検索について
- vbで配列を検索し、見つかった場合に行と位置を表示する方法について質問です。
- 現在は一回目の検索はできますが、ボタンを押すたびに再検索する方法や表示を切り替える方法についてアドバイスをお願いします。
- また、vbでの配列操作に関しても教えていただけると助かります。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
最後に該当した行を覚えておく必要がありますよね。 例) ------------------------------------ Private startIndex As Integer (省略) For j = startIndex To UBound(a1) (省略) If i <> 0 Then startIndex=j+1 '最終行+1を確保 Exit For End If (省略) ----------------------------------- startIndexの初期化のタイミングや最終行に達した場合等の処理は 考えてみてください:)
その他の回答 (3)
- redfox63
- ベストアンサー率71% (1325/1856)
お使いのコードがあれば公開しても支障の無い範囲で投稿しましょう Array.FindIndexと前回発見した位置を記憶しておいてということでしょうか Formレベルの変数に dim sTag as String ' 検索する文字列 Dim nStart as Integer ' 検索開始位置 Private Function myFindFunc( byVal ss as String) as Boolean return ( ss.IndexOf( sTag ) > -1 ) End if を記述して、ボタンのクリックイベントに dim r,i as integer sTag = Text.Text TextBox1.Clear() TextBox2.Clear() TextBox3.Clear() r = Array.FindIndex( a1, nStart, AddressOf myFindFunc ) if r > -1 then TextBox1.Text = a1(r).IndexOf( sTag ) + 1 TextBox2.Text = r + 1 TextBox3.Text = a1(r) end if nStart = r + 1 といった感じでしょう ・・・
お礼
アドバイスありがとうございました^^
- redfox63
- ベストアンサー率71% (1325/1856)
検索対象をスキップするように組めばいいでしょう a2 = Text.Text Intger.TryParse( TextBox2.Text, r ) i = 1 j = r for each ss as string in a1 if j > 0 then j -= 1 Continue For end if i = ss.IndexOf( a2 ) r += 1 if i > -1 then TextBox1.Text = i+1 TextBox2.Text = r TextBox3.Text = ss end if next VB.NET2003以前なら for each ss as string in a1 if j > 0 then j -= 1 else i = ss.IndexOf( a2 ) r += 1 if i > -1 then TextBox1.Text = i+1 TextBox2.Text = r TextBox3.Text = ss end if end if next といった具合でしょう String.IndexOfで見つからなかった場合の値は -1ですよ
補足
回答ありがとうございます。 説明下手ですみません。 a1に以下の内容があった時 a1(0) = "四面楚歌" a1(1) = "一石一石" a1(2) = "石橋を渡る" a1(3) = "石橋を渡る" a1(4) = "四面楚歌" 楚歌で検索ボタン(クリック)をしますと 1(行)3(位置)が表示されて。 もう一回検索ボタン(クリック)をしますと 5(行)3(位置)がでるようなことなのです。 ボタンをおすたびに、あったときは表示されるようにしたいのです。 アドバイスいただいた方法だと、最後までいきます。 説明下手ですみません。 よかったら おしえてください。
- ProKaseifu
- ベストアンサー率51% (98/192)
??? フォーム上にボタンを置いてボタン.Clickイベント中に上記の処理を入れればいいのでは? 以下独り言 またエスパー質問だろうか・・・
補足
こんばんは、 上記の処理でやりますと。 ”例”と検索をかけると、 text1.Textには 1と出力。(位置表す) text2.Textには 1と出力。(行表す) text3.Textには 例1と出力。 このように表示されまして また クリック(検索ボタン)をおしても text1.Textには 1と出力。(位置表す) text2.Textには 2と出力。(行表す) text3.Textには 例2と出力。 と表示されないのです。 すみません 説明不足で よかったら アドバイスおねがいします。
お礼
アドバイスありがとうございました^^