【質問内容】
test1.csvの社員番号と日付とtest2.csvの番号と日付が一致した時だけ
test1.csvの時刻とtest2.csvの3つの時刻の中で(計4つ)の中で一番時刻の遅い値を返すプログラムを書こうとしています。
test2.csvにデータがなかった場合はそのままtest.1の内容を出力したいです。
for文などを使用して添え字やキーなどを作れば可能になりますでしょうか。
ご教示ください。
###テストデータ
**テストファイル1:test1.csvの内容** 12345,2019/01/01,17:25 12345,2019/01/02,19:25 12345,2019/01/03,21:25 12345,2019/01/04,23:25
**テストファイル2:test2.csvの内容** 12345,2019/01/01,17:25,23:25,19:25 12345,2019/01/02,19:25,20:25,21:25 12345,2019/01/03,21:25,19:25,15:25 12345,2019/01/04,23:25,21:25,21:25
**出力したい内容:OutFile1.csv** 12345,2019/01/01,23:25 12345,2019/01/02,21:25 12345,2019/01/03,21:25 12345,2019/01/04,23:25
発生している問題・エラーメッセージ
内側のDo Until objInFile2.AtEndOfStreamが終わったあと
test1.csvの2行目を比較したいのですが、書き込み処理に移ってしまいます。
■現在出力される内容
12345,2019/01/01,23:25
12345,2019/01/02,19:25
12345,2019/01/03,21:25
12345,2019/01/04,23:25
### 作成を試みたソース
Const Path = "C:" Const InFile1 = "test1.csv" Const InFile2 = "test2.csv" Const OutFile1 = "OutFile1.csv" Dim objFso Dim T_KEY Dim SYA_BG Dim KINMU_DATE Dim TIME_1_1 Dim M_KEY Dim SYA_BG2 Dim KINMU_DATE2 Dim TIME2_1 Dim TIME2_2 Dim TIME2_3 Dim count1 Dim count2 Dim NUM(4) Dim NUM_MAX Set objFso = CreateObject("Scripting.FileSystemObject") Set objInFile = objFso.OpenTextFile(Path & "\" & InFile1, 1, False) Set objInFile2 = objFso.OpenTextFile(Path & "\" & InFile2, 1, False) Set objOutFile = objFso.OpenTextFile(Path & "\" & OutFile1, 2, True) Do Until objInFile.AtEndOfStream strInFileLine = Split(objInFile.ReadLine, ",") SYA_BG = strInFileLine(0) KINMU_DATE = strInFileLine(1) TIME_1_1 = strInFileLine(2) Do Until objInFile2.AtEndOfStream strInFileLine2 = Split(objInFile2.ReadLine, ",") SYA_BG2 = strInFileLine2(0) KINMU_DATE2 = strInFileLine2(1) NUM(1) = TIME_1_1 NUM(2) = strInFileLine2(2) NUM(3) = strInFileLine2(3) NUM(4) = strInFileLine2(4) IF SYA_BG = SYA_BG2 AND KINMU_DATE = KINMU_DATE2 Then for i = 1 to 4 if NUM_MAX < NUM(i) Then NUM_MAX = NUM(i) END IF NEXT END IF TIME_1_1 = NUM_MAX Loop objOutFile.WriteLine SYA_BG & "," & KINMU_DATE & "," & TIME_1_1 Loop objInfile.Close objInfile2.Close objOutfile.Close Set objInfile = Nothing Set objInfile2 = Nothing Set objOutFile1 = Nothing Set objfso = Nothing
使用言語
VBS
回答4件
あなたの回答
tips
プレビュー