人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

※200pt※visual basic .netの質問です。たとえば、Aというテキストファイルに、りんごと記載されている
行があれば Bという条件処理をしたいとします。
どのようにすればよいでしょうか。

また、応用として、同じくAというテキストファイル行【全体】の中で、りんご 又は すもも という2つの
単語がAファイル内にあったら、Cという条件処理をしたい場合はどうすればよいでしょうか。






●質問者: kenpo43
●カテゴリ:コンピュータ ウェブ制作
✍キーワード: .NET Visual Basic すもも りんご テキスト
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● くまっぷす
●69ポイント

VB .netの例がちょっと見つけられなかったのですが、VBScriptの例があったのでこれが近いと思います。

基本的には

・ファイルをオープンする

LineInputで1行読み込み

・指定の文字列があるかどうかをInStrで調べる

・あった場合は調べるループを抜けて特定の処理へ

・ファイルの最後まで調べる

複数の文字列がともに入っているかどうかという場合には、どちらかが見つかった時点でループを抜けて処理へ飛ぶのではなくてフラグを立てます。例えばRingoFlagとSumomoFlag。

・ファイルをオープンする

・RingoFlag=0, SumomoFlag=0に初期化

・1行読み込み

・InStr関数で「りんご」があればRingoFlag=1

・InStr関数で「すもも」があればSumomoFlag=1

・この時点で両方のフラグが立っていればループを抜けて特定の処理へ

・ファイルの最後まで調べる。

各関数の使いかたについてはリンク先のMSのサイトを見てください。


2 ● Takumu
●76ポイント ベストアンサー

綺麗なコードでないですが、こんなところでどうでしょうか?

Dim sr As System.IO.StreamReader

Dim src As String

sr = New System.IO.StreamReader("ファイル名")

src = sr.ReadToEnd()

sr.Close()

Dim rex1 As New System.Text.RegularExpressions.Regex("りんご", System.Text.RegularExpressions.RegexOptions.None)

Dim rex2 As New System.Text.RegularExpressions.Regex("すもも", System.Text.RegularExpressions.RegexOptions.None)

If (rex1.IsMatch(src)) Then

MessageBox.Show("a")

End If

If (rex1.IsMatch(src)) And (rex1.IsMatch(src)) Then

MessageBox.Show("b")

End If

◎質問者からの返答

ありがとうございました。とってもわかりやすかったです。


3 ●
●67ポイント

ここにある「テキスト ファイルの書き込み (例 1)」というサンプルを参考にしてみてはいかがでしょうか。

例ではファイルを開いて、読み込み、閉じる、という処理を行っていますが、読み込んだ後、比較処理を行えば良いと思います。

上記の正規表現を使用したパターン照合も参考になると思います。

Matchメソッドを使って比較を行い、Successプロパティを調べて、処理を分岐させます。

例ではメールアドレスかどうかのチェックを行っておりますが、その部分を例えば

New Regex("(.*りんご.*)")

のようにしてみてはいかがでしょうか。

例ではIf文で振り分けて、メッセージの出力を変えていますが、ここに処理を記述すれば良いはずです。

ファイル全体を検索したいのであれば、以下のようにすれば良いと思います。

  1. 検索結果を格納するための配列aを準備
    • a[0]とa[1]を数字の0で初期化
  2. ファイルを一行ずつ読み込み
  3. "りんご"を含むかどうかチェック
    • 含んでいた場合には、配列の1つ目の値をカウントアップ
  4. "すもも"を含むかどうかチェック
    • 含んでいた場合には、配列の2つ目の値をカウントアップ
  5. 次の行に移動

最終的に配列a[0]とa[1]の両方の値が0でなければファイルには"りんご"、"すもも"の

2つの文字列が含まれていることになります。

配列の値を参照すれば、何行にその文字列が含まれていたのかも把握できます。

ただ、一行に"りんご"が2つあった場合でも、正規表現で行単位でのマッチングしか行っていませんので、正確な単語の個数は把握できません。

単語の個数を把握したい場合、以下の内容を参考にしてみてください。

単語が含まれるかどうかのチェックでしたらKumappusさんの回答で十分だと思います。

参考になると幸いです。

◎質問者からの返答

ありがとうございました。みなさんとっても詳しく(手元の逆引きの本よりもとってもわかりやすいです)、教えてくれたので、波及知識も身につきました。今回は、200ptを3人に分配いたします。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ