電子書籍の厳選無料作品が豊富!

あるテキストファイル(*.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

A 回答 (2件)

補足の回答です。



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
でも同じ結果が返ります。

この回答への補足

"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
    • good
    • 0
この回答へのお礼

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

お礼日時:2002/08/21 10:22

単純に、文字列から特定の文字列を抜き出すと考えてよいのでしょうか?


上の例で言うと、"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","")

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

この回答への補足

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

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

という意味です。

補足日時:2002/08/20 15:29
    • good
    • 0
この回答へのお礼

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

お礼日時:2002/08/20 15:41

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!