• ベストアンサー

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

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を使用しています。 よろしくお願いします。

  • j-y-a
  • お礼率28% (56/197)

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

  • ベストアンサー
  • 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

  • ワイルドカードの検索

    項目に'%'が入力されているデータを抽出したいのですが、 以下のようなSQLだとデータがすべて抽出されていまいます。  SELECT *   FROM t_table  WHERE code_name LIKE '%%%' '%'を検索するにはどうのようにすればいいのでしょうか?

  • 検索値から、その行の抽出。

    検索値から、その行の抽出。 シート1のデータがあります。 シート2のA1に検索値を置き、“あああ”の行をシート2に抽出。 シート2のA列に任意の番号を振った後、その番号順での表示(ピンク部分)を希望。 自分でいろいろと調べて試行錯誤したのですが、 思うようにいかず、ご質問させていただきます。 ご回答よろしくおねがいします。

  • Visual C++を 用いたテキストファイル読み込み(応用)

    Microsoft Visual C++ 2008 Express Editionを使っています。 テキストファイルは 約5000行×6列の数値(のみ)になっております。(列間にスペースあり) いくつかある5000×6行テキストファイルの中から、ファイル名を入力することで任意のテキストファイルにアクセスし、さらに6列のデータをそれぞれ別の配列に格納するコンソールプログラムを考えていますが行き詰まっています。例えば、1列目を配列1、2列目を配列2、・・・といった具合です。 詳しい方、どうかよろしくお願いいたします。

  • ファイルメーカでリレーションで抽出してきた値が検索できない?

    MacOS10.3 / FileMaker4.0 とあるデータベースの中で、リレーションを用いて別のファイルメーカのデータを抽出しています。 抽出された項目で検索を行いたいのですが、まったくできません。 普通の項目は検索ができるのに、抽出された項目は検索できないのでしょうか? また、別な方法で検索は可能でしょうか? ご存知の方がいらっしゃいましたらお教えください。

  • エクセルにて検索

    エクセルで作ったデータの中からデータを検索して該当するものを全て 抽出する関数を教えて下さい。

  • あるファイルないから日付指定して検索その日付の行のものを別のファイルに保存

    data.txtというファイルがあります。下記のような感じです。 2005/12/01,0:40:55,7.8 2005/12/02,0:41:55,7.8 2005/12/03,0:42:55,7.8 2005/12/04,0:43:55,7.3 2005/12/05,0:44:55,7.3 2005/12/06,0:45:55,7.8 2005/12/07,0:46:55,7.8 2005/12/08,0:47:55,7.8      ・      ・ です。 たとえばこの中から検索値(yyyy/mm/dd)2005/12/01を含む行から2005/12/04を含む行の間すべてを読み出してsend.txtというファイルに保存する方法を教えてください。 検索値が2005/12/01と2005/12/06だとするとsend.txtは下記のようになります。 2005/12/01,0:40:55,7.8 2005/12/02,0:41:55,7.8 2005/12/03,0:42:55,7.8 2005/12/04,0:43:55,7.3 2005/12/05,0:44:55,7.3 2005/12/06,0:45:55,7.8 検索値の変数は前が$nameで後が$name2です。

    • ベストアンサー
    • Perl
  • ラベルの大きさを変えるには

    VB初心者です。 VB2005express editionを使っています。 電卓を作ろうと思い表示画面にラベルを使おうとしたのですが、 ラベルの大きさが画面上でドラッグしてもプロパティのサイズの値を入力しても変えることができません。 テキストボックスも同じようになります。 ボタンは任意の大きさにできます。 これは何が悪いのでしょうか? ラベルは任意の大きさにできないのでしょうか?

  • ACCESSで「"」を検索する

    テーブルデータの中に「"」を文字として使用している場合 クエリーで抽出条件に「"」を入れて検索しようとすると 指定した式に不正な文字が含まれています と出て検索できずに困っています どうにか「"」を含むデータを検索できないでしょうか ちなみにACCESS97です

  • ExcelのVBAで、XMLファイルのデータ抽出

    はじめまして。 XMLファイルに含まれたデータの中から、特定の条件のデータのみを抽出するプログラムを作りたいと思っております。 XMLファイルの中身は <p name="test">あいうえお</p> <p name="test2">かきくけこ</p> <p name="test3">さしすせそ</p> … のようなデータが2~300以上あり、その中から、NAMEが"test"のものだけを抽出するプログラムなのですが、ExcelのVBAで可能でしょうか? ご教授頂ければ幸いです。よろしくお願いいたします。

  • 日付の範囲検索がしたい

    お世話になります。 テーブル名:info フィールド名:no,date,name フィールドのデータタイプ:int型,char型,char型 のデータベースがあります。dateにはyyyy/mm/ddの形でデータが入っているのですが、 そのdateから、例えば2004/01/01~2005/01/01までに該当するデータを検索して、抽出したいのですが、方法がわかりません。 SELECT REPLACE(date, '/', '') FROM info で、“/”がないデータを取り出すことはできるのですが、その後どうしたら良いかがわかりません。 どなたかいい方法教えていただけないでしょうか?

専門家に質問してみよう