こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

ある文字列を検索するボタンのつくりかた

あるテキストファイル(*.txt)の内容をテキストボックスに表示するボタンを作りました。さらに、このテキストファイルの内容の中から、決まった文字列のみを表示できるようにしたい(例.abcdefgと書かれたテキストに対してbcdのみ抜き出す)のですが、どうすれば良いのでしょうか。初心者なので、簡単にできる方法があれば教えてください。

<現在のコード>
Dim myFile As String

Private Sub Command1_Click()
CommonDialog1.Filter = "テキスト(*.txt)|*.txt|すべて(*.*)|*.*"
CommonDialog1.FilterIndex = 1
CommonDialog1.Flags = cdlONFileMustExist '既存ファイルのみ読み込み
CommonDialog1.ShowOpen
If CommonDialog1.FileName = "" Then Exit Sub
myFile = CommonDialog1.FileName
FileRead
Form1.Caption = "Form1 " & myFile

End Sub

Private Sub Form_Load()
Form1.Height = 3510
End Sub

Private Sub FileRead()
Dim buf As String
On Error GoTo ErrTrap1
Open myFile For Input As #1
RichTextBox1.Text = ""
While Not EOF(1)
Line Input #1, buf
RichTextBox1.Text = RichTextBox1.Text & buf & Chr(13) & Chr(10)
Wend
Close #1
Exit Sub
ErrTrap1:
MsgBox Err.Description
Err.Clear
End Sub

投稿日時 - 2002-08-20 10:57:39

QNo.339337

すぐに回答ほしいです

質問者が選んだベストアンサー

補足の回答です。

pos = InStr(1,RichTextBox1.Text,"bcd")
If pos > 0 Then
 RichTextBox1.Text = Mid$(RichTextBox1.Text,pos,Len("bcd"))
End If

strTextに"bcd"のみ抜き出します。
ある意味、
pos = InStr(1,RichTextBox1.Text,"bcd")
If pos > 0 Then
 RichTextBox1.Text = "bcd"
End If
でも同じ結果が返ります。

投稿日時 - 2002-08-20 16:00:44

補足

"bcd"のみ表示できるようになったのはいいのですが、"bcd"文字列が複数回
出ているテキストファイルも1回分しか表示できません(つまり"bcd"があるか
ないかはわかるのですが、何回表示されているかがわからない)。下の例の
ように出来ないものでしょうか。

例. a"bcd"efg "bcd"xyz "bcd" "bcd" と書かれたテキスト
  
  これを"bcd"のみ表示できるように設定したボタンを押す
          ↓
  "bcd"とテキストボックスに表示される
          ↓
  本当は "bcd" "bcd" bcd" "bcd" と表示したい(上の例では"bcd"が
  4回出ているため)

また、"bcd"が一度も出てこないテキストに対しては、テキストボックスに
何も表示がでないようにした上に、「"bcd"が見つかりません」と書かれた
メッセージボックスを表示したいのですが、現状では元の文がそのまま
表示されてしまいます。If式を使うか、
If pos > 0 Then
 RichTextBox1.Text = "bcd"
の後に、"Else"で処理すればよいかとは思うのですが、これもよくわから
ないので、あわせて教えていただけないでしょうか。

投稿日時 - 2002-08-21 11:20:12

お礼

"bcd"のみ拾えるようになりました。ありがとうございます。

投稿日時 - 2002-08-21 10:22:35

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

単純に、文字列から特定の文字列を抜き出すと考えてよいのでしょうか?
上の例で言うと、"abcdefg" → "aefg" のようにする。
というこで説明しますと、


InStrを使った方法。
pos = 1
Do
 pos = InStr(pos,RichTextBox1.Text,"bcd")
 If pos > 0 Then ' 見つからなければ0を返します
  If pos = 1 Then
   RichTextBox1.Text = Mid$(RichTextBox1.Text,pos + Len("bcd"))
  ElseIf pos > Len(RichTextBox1.Text) - Len("bcd") Then
   RichTextBox1.Text = Left$(RichTextBox1.Text,pos - 1)
  Else
   RichTextBox1.Text = Left$(RichTextBox1.Text,pos - 1) & Mid$(RichTextBox1.Text,pos + Len("bcd"))
  End If
 End If
Loop while pos > 0 And pos < Len(RichTextBox1.Text)

試していないのでなんともいえませんがこれで出来るはずです。


それともう一つ。
Replaceを使った方法。

RichTextBox1.Text = Replace(RichTextBox1.Text,"bcd","")

これでも出来ると思います。

投稿日時 - 2002-08-20 11:34:54

補足

質問の仕方が悪かったようで、すいません。

例.abcdefgと書かれたテキストに対してbcdのみ抜き出す
  "abcdefg" → "bcd" のようにする。

という意味です。

投稿日時 - 2002-08-20 15:29:18

お礼

質問の意味と答えが喰い違ってしまいましたが、「InStrを使った方法。」で
"aefg"を抜き出すことが出来ました。ありがとうございます。度々申し訳ない
のですが、回答に対する補足のやり方も教えていただけないでしょうか。

投稿日時 - 2002-08-20 15:41:44

あなたにオススメの質問