• ベストアンサー

テキストファイル内を検索したい

name,a,任意のデータ,mon,10,11,12,13,tue,11,12,13....... name,b,任意のデータ,mon,10,12,13,tue,11,12,13....... というようなデータの中から、mon,11というデータを持っている人のname,○,の○の部分を抽出したいんですが、どうやったらいいでしょう? 考えたのは、monを検索→位置を記憶→すぐ後ろのtueを検索→位置を記憶→最初の位置から次の位置までの間の中で、11を検索→あればname,の後のデータを返す という方法なのですが・・どうやって書いたらいいかさっぱりです^^; このデータはテキストファイルに記憶されています。 VB2005 Express Editionを使用しています。 よろしくお願いします。

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

  • ベストアンサー
  • perse
  • ベストアンサー率74% (113/152)
回答No.1

条件となる列や取得したい列の位置が常に同じかどうかで やり方が変わると思いますが、 基本的にテキスト内を行単位で処理していけばいいと思います。 とりあえず列位置を固定と考えてるとコンナ感じ。 外部テキスト(gaibu.txt)の中身 name,a,mon,11,11,12,13,tue,11,12 name,b,mon,11,12,13,tue,11,12,13 VBソース '列の区切り Const KUGIRI As String = "," '列数 Const RETSU_SU As Integer = 10 Dim reader As System.IO.StreamReader Dim strBufferLine As String '列のデータを格納する配列 Dim strBuffer(RETSU_SU - 1) As String '目的の名前 Dim strName As String reader = New System.IO.StreamReader("C:\gaibu.txt") strBufferLine = "" 'テキストの最後までループ Do While reader.Peek() >= 0 '一行読み込む strBufferLine = reader.ReadLine '読み込んだ一行を区切りごとに分ける strBuffer = strBufferLine.Split(Convert.ToChar(KUGIRI)) '3列目がmonのとき '(配列は0から始まるので列と一つずれてることに注意) If strBuffer(2) = "mon" Then 'さらに4列目が11のとき If strBuffer(3) = "11" Then '2列目の名前を取得 strName = strBuffer(1) Debug.Print(strName) End If End If Loop reader.Close()

その他の回答 (1)

  • KG_
  • ベストアンサー率62% (34/54)
回答No.2

そのテキストデータがCSVであればTextFieldParserを利用してもできますよ。 ex.)------------------------- Dim Input As String = "C:\test.txt" Using tfp As New FileIO.TextFieldParser(Input, System.Text.Encoding.Default)   Dim flds As String() = {}   Dim dlm As String() = {","}   With tfp     .Delimiters = dlm     .TextFieldType = FileIO.FieldType.Delimited   End With   While tfp.EndOfData = False     flds = tfp.ReadFields     If flds(3) = "mon" And flds(4) = "11" Then       Debug.Print(flds(1))     End If   End While End Using

関連するQ&A