• ベストアンサー

VB.netで検索した文字の後の文字列を取得

VB.net(2010)でテキストファイルから特定の文字を検索してその後にある文字列を取得するにはどのようにすれば良いでしょうか。 【具体例】 C:\testフォルダ以下にある複数のtextファイルから"aaa"の文字を検索して、その後にある"xxx"を取得する。(同じ行にある文字列) 【textファイルの中身】 111 aaa xxx 222 ご教示のほど、よろしくお願いします。

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.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等で調べられるはずです。

satoshin3104
質問者

お礼

ご回答ありがとうございました。 確かにご指摘の通り、具体例や出力のイメージを説明しないことには、 回答もしずらいですよね。今後、注意いたします。 実際に頂いたコードでやりたいことが実現できそうです。 あとは、これをベースに自分で修正していきたいと思います。 ありがとうございました。

関連するQ&A

  • 特定の文字列が一致する行から、文字列を抽出する方法

    ファイルから、特定の文字列を検索し、その文字列に対応する文字列を取得したいのですが、どなたか方法を教えていただけないでしょうか? 処理: test.txt中に以下の文字列が記載されています。 ----- TEST011:FILE00 TEST01:FILE01 TEST02:FILE02 XTEST01:FILE01 XTEST02:FILE02 ----- test.txtから、TEST01に対応する文字列FILE01を取得したいです。 当初、strchrを利用すれば良いかと考えていたのですが、 TEST011の行が先に抽出されてしまい、うまくいきません。 どなたか解決方法を教えていただけないでしょうか。

  • テキストファイル内の文字列検索

    はじめまして。 excel vbaを使用しているものです。 1つのファイル内にある複数のテキストファイル内に特定の文字列が含まれているかどうか検索したいと考えています。 もしあればそのファイル名を取得したいのですがどのようにすればよいでしょうか? 検索するファイル名「C:\Users\takashi sato\Desktop」 検索する文字列「STTT」半角 外部ファイルの操作はすごく難解なので困っております。 ちなみに使用ソフトはEXCEL2003です。

  • 文字列検索について

    Windows98の「検索」→「ファイルやフォルダ」の"文字列検索"で.docファイルや.mhtファイルの中身が検索できないのですが、どうしてですか?ご教授お願います。

  • 検索文字列以外のファイル

    テキストファイルの中身を検索して、その文字列以外のファイル名を取りたいのです。具体的には、 【A.txtの中身】 123 abc 【B.txtの中身】 111 abc 【C.txtの中身】 222 abc このようなテキストファイルの中身を検索して、文字列「123 abc」以外が書かれているファイル名(つまり、B.txt、C.txt)を取得したいのですが、findstrやForなどを駆使すれば、できますでしょうか?

  • バッチファイルで文字列の検索結果件数を取得したい

    バッチファイルでテキストファイルに含まれる、文字列を検索し、その検索結果個数は取得可能でしょうか? 【例】test.txt 【内容】abcdefg12345xyza テキストファイルは1レコードです。 "a"で検索したときは2を取得したいのです。。。 バッチファイルだけじゃ無理ですかね(><) よろしくお願いします。

  • VBスクリプトにて検索した文字を出力

    VBSによりコンピュータ名やIPアドレスやプロキシなどの情報を、PC.txtに出力させました。 以下のツールを作りたいのですが、ご教示いただけないでしょうか。 まずC:\PC配下に上記PCx.txtを複数格納しております。(内容はそれぞれのPCのもの) ツール実行後、テキストファイルを一つ一つ読み込み、 "IPアドレス"という検索文字に該当した行をその検索文字列とスペースを省いた値(xxx.xxx.xxx.xxx)を Csvに出力させます。 次に同じように他の出力したい項目を検索していきます。 イメージとして(IPアドレス,, , , ,・・・)とcsvに出力していきます。 次に2個目のテキストファイルを読み、次の行に同じく出力していきます。 最終的にテキストファイル数=CSVの行数となるようにしたいと思います。 ある場所のテキストの文字を検索する、そして必要部分のみCSVに出力するという方法のイメージがつきませんのでご教示頂けますでしょうか。

  • 文字列中からファイルパスのみを取得する方法

    テキストファイルからデータを1行ずつ読み取り、 その中にファイルパスがあれば他のファイルに書き出すというロジックを考えています。 文字列は 例えば  include ROOT_PATH."/class/test.txt"; という文字列で、この中から  /class/test.txt という文字列だけを取得したいのです。 現在、拡張子から1文字ずつ前の文字列をチェックしていって、「”」が見つかったらその間の文字列を ファイルパスとしようとしています。 これを1発で行ってくれるような関数等ははないでしょうか?   良いお知恵がありましたらご教授お願いします。

  • 文字列の検索高速化について

    大容量の文字列から文字列を検索するのに四苦八苦しております。 現在は文字列を構造体→メモリを確保でなんとかやっておりますが、データの容量が大きい為、時間が掛かりすぎてしまいます。 データ 70文字×30000行程度(行数可変)の文字列ファイル(すべて半角英数) 検索する側、検索される側共に同じファイルを使用します。 検索する側から一行ずつ文字列を取得→特定のカラムから文字列を抜き出す→検索される側からヒットした行を抜き出す→別処理を行う (検索に使用した行はスルー、検索される側には検索文字列が複数存在する可能性あり→すべて抜き出したい) また、抜き出した行は検索する側、される側共に次以降二重処理して速度が遅くなってしまうかと思うので、できれば削除したい。(現在は二重処理も致仕方ないとしてそのままやっています) 過去ログを読むとハッシュテーブルが良いかと言われていますが、このような場合はどのようなアルゴリズムが良いのでしょうか。 質問がわかりずらく申し訳ないですが、アドバイスを頂ければと思います。 また、使用方法等が詳しく記載されているページ等がありましたら教えて頂ければ幸いです。

  • 複数の文字列検索

    いつもお世話になっています。 色々な文字列検索ソフトを使用してみたのですが なかなか思い通りの結果が出ずに悩んでおります。  複数検索が出来るソフトでも、同一行内の検索となっていたりするので・・・・ (1)複数フォルダーに大量にあるテキスト形式で書かれたファイルから (2)複数の文字列が含まれているファイルを探し出す たとえば、「あああ」と「いいい」の両方が含まれているファイルを探し出すことを行いたいのですが・・・・・ どうぞ、よろしくお願いします

  • 複数行になっている文字列を検索したい

    PERL初心者です。 以下、テキストに複数行になっている箇所の2行目の「BBB」を検索キーとして 3行目の「CCC」を取得したいのと2行目、3行目を1レコードにしたいのですが できません。 test.txt ---------------------------------- 1. AAA BBB CCC DDDD 2. AAA BBB 3. CCC DDDD 4. AAA BBB CCC DDDD ----------------------------------- 以上よろしくお願いします。

専門家に質問してみよう