※200pt※visual basic .netの質問です。たとえば、Aというテキストファイルに、りんごと記載されている

行があれば Bという条件処理をしたいとします。
 どのようにすればよいでしょうか。

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





 

回答の条件
  • 1人2回まで
  • 登録:2006/03/15 16:19:01
  • 終了:2006/03/15 22:28:21

ベストアンサー

id:Takumu No.2

Takumu回答回数25ベストアンサー獲得回数22006/03/15 17:05:12

ポイント76pt

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

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

id:kenpo43

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

2006/03/15 22:20:54

その他の回答(2件)

id:Kumappus No.1

くまっぷす回答回数3784ベストアンサー獲得回数1852006/03/15 16:45:49

ポイント69pt

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

基本的には

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

LineInputで1行読み込み

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

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

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

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

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

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

・1行読み込み

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

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

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

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

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

id:Takumu No.2

Takumu回答回数25ベストアンサー獲得回数22006/03/15 17:05:12ここでベストアンサー

ポイント76pt

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

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

id:kenpo43

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

2006/03/15 22:20:54
id:bonlife No.3

回答回数421ベストアンサー獲得回数752006/03/15 17:06:32

ポイント67pt

ここにある「テキスト ファイルの書き込み (例 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さんの回答で十分だと思います。

参考になると幸いです。

id:kenpo43

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

2006/03/15 22:27:02

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません