プロが教える店舗&オフィスのセキュリティ対策術

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

A 回答 (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
    • good
    • 0

こんにちは。

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時間表記?

などの情報も必要だと思いますよ。
    • good
    • 1

こんにちは。



そういう内容なら、一般のアプリケーション・ソフトで良いような気がしますが、

VBなら、
ComboBox で、作り出した、検索textで、Open ~ For Input で、Line Input した各テキスト行を、InStr(テキストライン,検索text) >0 で検索し、ヒットしたものを、取り出せばよいと思います。

また、曖昧な内容になると、正規表現を使うことになるでしょうね。
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/11/03 15:28

>ファイル内にある文字列を検索してその1行すべてを取り出す方法


というより、
1行ずつ読み出して、フィールド分解し(splitとか)
フィールド比較するということになるかと思います
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/11/03 15:27

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!