- ベストアンサー
VB.netで検索した文字の後の文字列を取得
VB.net(2010)でテキストファイルから特定の文字を検索してその後にある文字列を取得するにはどのようにすれば良いでしょうか。 【具体例】 C:\testフォルダ以下にある複数のtextファイルから"aaa"の文字を検索して、その後にある"xxx"を取得する。(同じ行にある文字列) 【textファイルの中身】 111 aaa xxx 222 ご教示のほど、よろしくお願いします。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
これはVBの勉強の際の個人的質問ですか。実際のケースでは、該当箇所を探知した後、どう表現(説明)するか(アウトプットするか)が大事で、凝るとプログラム的にむつかしい(こちらの方がむつかしいケースが多い)。 質問には目的や、どうアウトプットするのか書かないとダメでしょう。 下記では、一番簡単なMessageBox表示で手を抜いているので、それ以上は質問者が勉強してください。 下記は個別レコード処理方式ですが、データを集合的に扱うSQLのような解法ではありません。 ーーー >C:\testフォルダ以下にある複数のtextファイルから 同一フォルダにあって、サブフォルダ関係にないものとする。 下記のコードを参考に上げておくから、自分の望みのファイルを選別するのは間気て見て。 Public Sub FileList() '指定のフォルダー内のファイルを全て列挙する Dim FolderName As String Dim FileName As String FolderName = "C:\Users\XXX\Documents\" Dim i As Integer Dim strext As String 'フォルダー名が取得できたら If FolderName.Length > 1 Then 'フォルダー内の全てのファイルのパスを取得 ’i = 1 For Each FileName In System.IO.Directory.GetFiles(FolderName) '指定の拡張子のファイルだけ取得する場合 'i = i + 1 strext = System.IO.Path.GetExtension(FileName) If strext = ".txt" Then ' MessageBox.Show(System.IO.Path.GetExtension(FileName)) MessageBox.Show(System.IO.Path.GetFileName(FileName)) '<--ここ以下に処理のコードを入れる End If 'Massageボックスにファイル名を表示 'MessageBox.Show(System.IO.Path.GetFileName(FileName)) 'If i > 10 Then Exit For 'テスト用 Next End If End Sub '----処置のトリガー 簡単なので、Form1のクリックにした Private Sub Form1_Click(sender As Object, e As EventArgs) Handles Me.Click FileList() End Sub End Class 処理の部分に 2つのやり方を挙げる (1)Instr利用 コメントアウトした行のコード Private Sub Form1_Click(sender As Object, e As EventArgs) Handles Me.Click ' StreamReader の新しいインスタンスを生成する Dim cReader As New System.IO.StreamReader("C:\Users\惇\Documents\クエリ例.csv", System.Text.Encoding.Default) ' 読み込んだ結果をすべて格納するための変数を宣言する Dim stResult As String = String.Empty Dim p As Integer ' 読み込みできる文字がなくなるまで繰り返す While (cReader.Peek() >= 0) ' ファイルを 1 行ずつ読み込む Dim stBuffer As String = cReader.ReadLine() ' 読み込んだものを追加で格納する 'stResult &= stBuffer & System.Environment.NewLine’ 'MessageBox.Show(stBuffer) ' p = InStr(stBuffer, "山田") 'If p <> 0 Then 'MessageBox.Show(Mid(stBuffer, p + Len("山田") + 1, Len(stBuffer) - p - Len("山田") - 1)) 'MessageBox.Show(Mid(stBuffer, p, Len(stBuffer) - p)) ' End If p = stBuffer.IndexOf("山田") If p > 0 Then MessageBox.Show(stBuffer.IndexOf("山田")) End If End While ' cReader を閉じる (正しくは オブジェクトの破棄を保証する を参照) cReader.Close() ' 結果を表示する 'MessageBox.Show(stResult) End Sub (2).IndexOf の利用 Instrと同じようになるので、位置のみ求めている。 ーーー 処理の流れは、 (1)フォームのクリックイベント (2)ファイルを見つける(選別する) (3)文字列のあり場所を見つける (4)結果表現 該当が多数あればどう表現するか。 また他の処理が後に控えているのか。 ーー 上記はWEBで出てくる記事の解説のコードを一部修正したもので、質問者でもGoogle等で調べられるはずです。
お礼
ご回答ありがとうございました。 確かにご指摘の通り、具体例や出力のイメージを説明しないことには、 回答もしずらいですよね。今後、注意いたします。 実際に頂いたコードでやりたいことが実現できそうです。 あとは、これをベースに自分で修正していきたいと思います。 ありがとうございました。