- ベストアンサー
VBScriptについて教えてください!
VBScriptで日付が記載されたテキストファイルを読み込み 読み込んだ値と今日の日付を比較する処理をしたいのですが、 今日の日付と異なるのに一行目でいきなり一致との判断をしてしまいます。 どうしてなんでしょうか? すごく初歩てきなことかもしれませんが、御教授願います。 <日付が記載されたテキストの内容> 20090401 20090502 20090603 ・ ・ ・ <スクリプト内容> '本日を取得 strTodayTmp=Year(Date) & Month(Date) & Day(Date) 'ファイルの内容を全部読み終えるまでループ Do Until objInFile.AtEndOfStream = true 'ファイルの内容を1行ずつ読み込む strRecord=objInFile.ReadLine intCompare = StrComp(strRecord, strTodayTmp, vbTextCompare) '読み込んだ内容と一致するか If intCompare = 0 Then 'フラグオン blnGo=1 end if Loop
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
補足しておきます。 コンパネの日付のフォーマットの ShortDate が、yyyy/MM/dd と登録していれば Replace(Date, "/", "") とすればよいと思います。 intCompare = StrComp(Trim(strRecord), strTodayTmp, 1) 全角が入る可能性を考えているのでしょうか? ファイルがそれほど大きくなければ、一気に読んでしまっても良いと思います。 '------------------------------------------- Dim strDate Dim objFSO Dim objFile Dim strFile Const fName = "Test1.txt" Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFile =objFSO.OpenTextFile(fName, 1) 'ForReading = 1 strFile = objFile.ReadAll strDate = FormatDate(Date) If InStr(1, strFile, strDate, 1) >0 Then MsgBox strDate & " Found", 64 Else Msgbox "Not Found", 48 End If Function FormatDate(arg) Dim y, m, d y =Year(arg) m = Right("0" & Month(arg),2) d = Right("0" & Day(arg),2) FormatDate = y & m & d End Function
その他の回答 (3)
- watabe007
- ベストアンサー率62% (476/760)
参考に strTodayTmp = Join(Split(Date, "/"),"") Do Until objInFile.AtEndOfStream i = i + 1 strRecord = objInFile.ReadLine lngCmp = StrComp(strRecord, strTodayTmp) If lngCmp = 0 Then blnGo=1 Exit Do End If Loop objInFile.Close If blnGo = 1 Then MsgBox i & "行目に一致" Else MsgBox "一致なし" End If
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 コードは試していませんが、一応、チェックポイントを回て置きます。 途中からでは、判断ができかねますが、 Set objFSO = CreateObject("Scripting.FileSystemObject") Set objInFile = objFSO.OpenTextFile(FileName) はあるという条件の元だと思います。 >20090401 strTodayTmp=Year(Date) & Month(Date) & Day(Date) まず、これは、単なる数字の並びですから、1月が'01'とはなりませんね。 m = Month(Date) m = String(2 - Len(m), "0") & m Format 関数はないと思いますから、こんなスタイルが必要だと思います。 intCompare = StrComp(strRecord, strTodayTmp, vbTextCompare) vbTextCompare の組み込み定数はないと思いますから、定数で置いていますか? それに、 If intCompare = 0 Then 'フラグオン blnGo=1 End if としても、Exit Do を入れないと、最後まですることになりますね。単に時間がかかるだけですが。
- tsukasa-12r
- ベストアンサー率65% (358/549)
もしも、 'ファイルの内容を全部読み終えるまでループ Do Until objInFile.AtEndOfStream = true 'ファイルの内容を1行ずつ読み込む strRecord=objInFile.ReadLine intCompare = StrComp(strRecord, strTodayTmp, vbTextCompare) '読み込んだ内容と一致するか If intCompare = 0 Then 'フラグオン blnGo=1 end if Loop If blnGo = 1 Then MsgBox "一致" Else MsgBox "不一致" End If のようなやり方ですと、途中の行は関係なく、最後の行が一致しているかどうかだけで判定されることになりますが、そこは大丈夫でしょうか? 一致した行が見つかるとループを抜けるような処理になっているのでしょうか? 試しに =========================================================== Set fso = WScript.CreateObject("Scripting.FileSystemObject") Set objInFile = fso.OpenTextFile( "Test.txt", 1, 0 ) '本日を取得 strTodayTmp=Year(Date) & Month(Date) & Day(Date) blnGo = 0 intLine = 0 'ファイルの内容を全部読み終えるまでループ Do Until objInFile.AtEndOfStream = true 'ファイルの内容を1行ずつ読み込む strRecord=objInFile.ReadLine intLine = intLine + 1 intCompare = StrComp(strRecord, strTodayTmp, vbTextCompare) '読み込んだ内容と一致するか If intCompare = 0 Then blnGo = 1 Exit Do End If Loop If blnGo = 1 Then MsgBox Cstr( intLine ) & "行目が一致" Else MsgBox "一致なし" End If =========================================================== として、 ================= 20090401 20090502 20090603 ================= というデータで実行してみると、"一致なし" に、 ================= 20090401 20090502 2010114 20090603 ================= というデータで実行してみると、"3行目が一致" になりました。