• ベストアンサー

ファイル内にある文字列を検索してその1行すべてを取り出す方法を教えてください!!

今いろいろ検索して探していたのですが全く見つかりませんでした。 お願いしたいことは まずtest.txtというファイルがあります。 内容は 2005/11/1,10,23.5 2005/11/1,11,22.5 という感じで日付,時間,温度で一行一行改行という感じになっています。 この中からVBのcomboboxを使って年、月、日にち、時間を別々に指定してそれにすべて一致する行をラベルに表示させたいのです。 私は今高校1年でPICNICというものを作って温度を計測、記録、読み出しをやりたいんですが計測、記録はできています。後読みだしだけです。よろしくお願いします。

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

  • ベストアンサー
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.4

こんにちは。KenKen_SP です。 #3 を投稿した時点でサンプルコードを書いていたのですが、レスが無いけど、 折角なので、アップしておきます。VB のバージョンが違っていたら書き直し て下さい。うまくいくといいですね。 あとは、適当にエラー処理をいくつか入れておきましたが、厳密にはしていま せん。 Private Sub Command1_Click()   Dim datDATE As Date   Dim strDATE As String   Dim strKWRD As String   Dim n    As Long   Dim strFILE As String   Dim strBUF As String   Dim aryBUF As Variant   Dim aryRESULT As Variant   Dim strFILE_FULLPATH As String      'データファイルのフルパス   strFILE_FULLPATH = App.Path & "\test.txt"      'Combobox コントロールからシリアル値生成   On Error Resume Next   datDATE = DateSerial(cmbYEAR.Text, cmbMonth.Text, cmbDay.Text)   If Err.Number > 0 Then     MsgBox "有効な日付ではありません", vbCritical     Exit Sub   End If   On Error GoTo 0      '日付書式化   strDATE = Format$(datDATE, "yyyy/m/d")   '検索キー生成---こんな感じ→"2005/11/2,10,"   strKWRD = strDATE & "," & cmbTime.Text & ","   'データのバッファサイズを求める   On Error Resume Next   strBUF = Space(FileLen(strFILE_FULLPATH))   'データファイルが無い場合のエラートラップ   If Err.Number > 0 Then     MsgBox "データファイルが見つかりません", vbCritical     On Error GoTo 0     Exit Sub   End If   On Error GoTo 0   'データファイルオープン   n = FreeFile()   Open strFILE_FULLPATH For Binary As #n     Get #n, , strBUF   Close #n      'この辺から VB6 からの関数を使っています      'Split 関数を使って改行コード(vbCrLf) でレコード単位に配列化   aryBUF = Split(strBUF, vbCrLf)   '配列内を検索   aryRESULT = Filter(aryBUF, strKWRD, True, vbTextCompare)      '結果表示   If UBound(aryRESULT) = -1 Then     MsgBox "該当データなし"   Else     '要素ごとに分割が必要なら Split 関数で「カンマ」で分割     'して、ラベルのCaptionに設定すれば良いでしょう     MsgBox aryRESULT(0)   End If      Erase aryRESULT   Erase aryBUF End Sub

その他の回答 (3)

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.3

こんにちは。KenKen_SP です。 > 簡単にプログラムを書いてもらえませんか... VB のバージョンでコードが変わるし、そもそも Excel VBA の話かもしれないし、、、 読み込みのロジックは既に示されています。 ちょっと厳しい話になりますが、その上でサンプルコードを望むなら、少なくともあなたの開発環境を具体的に提示する必要がありますよ。例えば、VB6 とか VB.NET とか。 VB6 ならバイナリでファイル全体を読み込んでから Split 関数を使って改行コードで配列化し、Filter 関数で配列内を検索する方法がありますね。 VB5 以前なら、配列内をループさせて検索しなければなりませんが、Wendy02 さんの InStr 関数で比較する方法が良いと思います。 VB.NET は触ったことが無いので、よく分かりません。 あと、 > 2005/11/1,10,23.5 こういうデータの仕様もきちんと説明した方が良いです。例えば、 ・日付: yyyy/mm/dd なのか yyyy/m/d なのか? ・時刻: 24時間表記? などの情報も必要だと思いますよ。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 そういう内容なら、一般のアプリケーション・ソフトで良いような気がしますが、 VBなら、 ComboBox で、作り出した、検索textで、Open ~ For Input で、Line Input した各テキスト行を、InStr(テキストライン,検索text) >0 で検索し、ヒットしたものを、取り出せばよいと思います。 また、曖昧な内容になると、正規表現を使うことになるでしょうね。

kabunori
質問者

お礼

もしお時間がありましたら簡単にプログラムを書いてもらえませんか?私はVB始めたばかりなのでまだ使い慣れてないものですいません。 よろしくお願いします

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

>ファイル内にある文字列を検索してその1行すべてを取り出す方法 というより、 1行ずつ読み出して、フィールド分解し(splitとか) フィールド比較するということになるかと思います

kabunori
質問者

お礼

参考にさせていただきます!!

関連するQ&A