• ベストアンサー

VBScript 日付の比較について

ログファイルに下記のように記述されています。 2005/10/05 aaaa bbbb cccc ~ mmmmm dddd left関数を使用して日付だけを取得し、取得した値とdate関数で取得した値を比較(IF文)し、一致した時に処理を行いたいんですが、何故か比較されません。 msgboxで何が表示されているか確認したんですが、両方とも中身は2005/10/05となっています。 何が原因なんでしょうか? left関数で取得した値が日付と認識されていないのでしょうか?教えてください。

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

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

#6> イベントビューアのテキスト形式の出力の区切りはタブのようです。 for i=1 to len(aLogLine) ch=Mid(aLogLine,i,1) MsgBox ch & ":" & Asc(ch) next のようにして調べてみてはどうでしょうか

SUPERH2O
質問者

お礼

出来ました!ありがとうございます。やはりタブ区切りだったんですね。

その他の回答 (6)

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

>区切り文字スペースではなくタブを指定することは可能でしょうか? field=split(aLogLine, vbTab) とします

SUPERH2O
質問者

補足

試してみたんですが、タブでもないようです・・・。他に何か考えられますでしょうか? 【ファイルについて】 イベントビューアのアプリケーションログをテキストファイルで保存し、そのファイルを処理しています。

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

>上記の方法で試したんですが、field(1)に1行全てが代入されます。 それは、変ですねえ。 多分、行頭にスペースが1つあって、以降の区切りがスペースではないのだと思います。

SUPERH2O
質問者

補足

もしかしたら、スペースでは無くタブで区切られているのかもしれません。区切り文字スペースではなくタブを指定することは可能でしょうか?

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

>回避策 フィールドが固定長でない場合にはmidで単純に取り出すのは、だめです。 #3のようなデータの場合、スペースで各フィールドが区切られているので、split関数を使って各フィールドに切り分けることができます。 例 aLogLine="2005/10/07 9:00:00 AAA BBB CCc" field=split(aLogLine) WScript.Echo field(1) 結果>9:00:00が表示される なので、上記のようにして timevalue(field(1))とすればいいです。 timevalueは"hh:mm:ss"の形式でいいのでそのまま使えます

SUPERH2O
質問者

補足

上記の方法で試したんですが、field(1)に1行全てが代入されます。 データ自体は、EmEditerで開くと空白で区切られているように思われます。何がいけないのでしょうか?

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

>時間で比較するにはどうすれば良いのでしょうか? 時間で大小比較するような場合には、 "10:00"の様な文字列からDate型に変換してから比較するのがいいと思います。 timevalue(mid(strdate,10,5))>=timevalue("10:00") のようにすることで10時以降であるか調べられます。 ただし、mid(strdate,10,5)の部分は11:15のような形式でなければいけません

SUPERH2O
質問者

補足

返信ありがとうございます。 新たな問題が出てきたので、教えて下さい。 現在ログに下記のように記述されています。 2005/10/07 15:00:00 AAA BBB CCc 2005/10/07 9:00:00 AAA BBB CCc timevalue(mid(MyString,11,5)) >= timevalue"9:00" 時間を比較する際に、1行目は"15:00"と取得できるんですが、2行目は"9:00:"が取得されます。これだと比較が出来ない為、時間を2桁にするにはどうすれば良いのでしょうか?回避策でも構いませんので教えて頂けますか?

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

>ここの部分なんですが→ "" & Date 空文字列と結合することで、強制的に文字列に変換しています。

SUPERH2O
質問者

補足

日付で比較することは出来ました!ありがとうございます。 もう一点教えて頂きたいんですが、時間で比較するにはどうすれば良いのでしょうか? 10時以降という比較内容しようと思っています。 mid(strdate,10,5) >= "10:00"

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

Date型をMsgBoxで表示した時に2005/10/05となってもそれは、文字列型ではありません。 IF "" & Date = left(logStr,10) then みたいに型をそろえる必要があります。

SUPERH2O
質問者

補足

コメントありがとうございます。 ここの部分なんですが→ "" & Date どういう意味なんでしょうか?教えてもらえますか?

関連するQ&A

専門家に質問してみよう