- ベストアンサー
ファイル内にある文字列を検索してその1行すべてを取り出す方法を教えてください!!
今いろいろ検索して探していたのですが全く見つかりませんでした。 お願いしたいことは まずtest.txtというファイルがあります。 内容は 2005/11/1,10,23.5 2005/11/1,11,22.5 という感じで日付,時間,温度で一行一行改行という感じになっています。 この中からVBのcomboboxを使って年、月、日にち、時間を別々に指定してそれにすべて一致する行をラベルに表示させたいのです。 私は今高校1年でPICNICというものを作って温度を計測、記録、読み出しをやりたいんですが計測、記録はできています。後読みだしだけです。よろしくお願いします。
- みんなの回答 (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)
こんにちは。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)
こんにちは。 そういう内容なら、一般のアプリケーション・ソフトで良いような気がしますが、 VBなら、 ComboBox で、作り出した、検索textで、Open ~ For Input で、Line Input した各テキスト行を、InStr(テキストライン,検索text) >0 で検索し、ヒットしたものを、取り出せばよいと思います。 また、曖昧な内容になると、正規表現を使うことになるでしょうね。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
>ファイル内にある文字列を検索してその1行すべてを取り出す方法 というより、 1行ずつ読み出して、フィールド分解し(splitとか) フィールド比較するということになるかと思います
お礼
参考にさせていただきます!!
お礼
もしお時間がありましたら簡単にプログラムを書いてもらえませんか?私はVB始めたばかりなのでまだ使い慣れてないものですいません。 よろしくお願いします