以前よりこちらでファイル比較を相談していたものですが
ファイルNo.1~26までを比較するソフトは出来たのですが
状況によっては1~3までとか1,4,18とか飛ばし飛ばしに
ファイルがある場合があります。
その場合For文では無いファイル番号で比較が終わってしまい
次に進まないのですが、こういった時はどうしたらよいのでしょうか?
IF文なのかとも思いましたが、調べてもしっくりくるものが判らず
???だらけです。
どなた様か御教授御願い致します。
ちなみに下がファイル比較するソースになります。
Option Explicit
Function Comp(ByVal F1$, ByVal F2$) As Long
Dim EXE, STD, TxT$, CNT&, I&
TxT = "fc /b " & F1 & " " & F2
Set EXE = CreateObject("WScript.Shell").Exec(TxT)
Set STD = EXE.StdOut
Do While EXE.Status = 0
'Do Until STD.AtEndOfStream
TxT = STD.ReadLine
CNT = CNT + 1
If CNT = 2 Then Exit Do
Loop
If EXE.Status = 0 Then
EXE.Terminate
If TxT = "FC: 相違点は検出されませんでした" Then
CNT = 0
Else
CNT = 1
End If
Else
CNT = EXE.ExitCode
End If
STD.Close
Comp = CNT
End Function
Private Sub Command1_Click()
Dim keka As Long
Dim I&, F1$, F2$
For I = 1 To 25
F1 = "a:\W-NO-" & Format(I, "00") & ".DAT"
F2 = "c:\VB\W-NO-" & Format(I, "00") & ".DAT"
keka = Comp(F1, F2)
Select Case keka
Case 1:
MsgBox F1 & "と" & F2 & "は等しくない"
Exit For
Case 2:
MsgBox F1 & "と" & F2 & "の比較で入出力障害を検出した"
Exit For
End Select
Next
End Sub
Dim I&, F1$, F2$ '★←ここまでは以前と同じ
'★== FD側のファイルを列挙する ==
F1 = Dir("a:\*.DAT") 'A:\にある拡張子.DATのファイル全て
If F1 = "" Then '★該当ファイルが1個も無い場合
MsgBox "該当ファイルがありません"
Exit Sub
End If
'★== FD側のファイル名を記録する ==
I = -1 '最初は-1から
ReDim F(0) 'ファイル名を蓄える配列
Do
I = I + 1 '配列要素数(正しくは最大インデックス)を更新
ReDim Preserve F(I) = F1 '記録する
F1 = Dir '次のファイルを取得 ※パラメータ無しに注意
Loop Until F1 = "" '見つからなくなるまで繰り返す
'★== 記録したファイル名を逐次処理する ==
For Each F1 In F
F2 = "c:\VB\" & F1 'HD側のパス名
If Dir(F2) <> "" Then 'ファイルが存在する場合
F1 = "a:\" & F1 'FD側パス名
keka = Comp(F1, F2) 'ファイルを比較
Select Case keka '結果による振り分け
'★ === 中略 === ここは前のSelect Case と同じ
End Select
End If
Next
End Sub
今までの For I = 1 To 25 ~ Next は消去してください。
いつもVBScriptなもので、ウッカリしておりました。
For Each F1 In F
F2 = "c:\VB\" & F1 'HD側のパス名
↓
For I = 0 To UBound(F) '★For Each を止めて、このように修正
F1 = F(I) '★インデックスで内容を取り出す
F2 = "c:\VB\" & F1 'HD側のパス名 '★←ここから以前のまま
お礼
nda23様 いつもありがとうございます。 御教授頂いたソースを試したところ ReDim Preserve F(I) = F1 '記録する で構文エラーと出てコンパイル出来ませんでした。 この場合何が原因なのでしょうか? またI=-1となっておりますが、なぜ-1からはじめるのですか? お暇な時にでも御回答頂けるとありがたいです。