ここから本文です

合計時間が日付毎に表示されない 現在、2つのcsv(元を2つ)を統合して、 ...

aam********さん

2019/5/718:51:30

合計時間が日付毎に表示されない


現在、2つのcsv(元を2つ)を統合して、
1つのcsv(目的としている結果)を作成しようとしております

vbsで作成しています。

csv1(元):csv_tmp2.csv
日付,off_t,名前,act,U_NO,T_name,on_t
2019/5/7,8:30 ,CCC,END,30,A-GP,8:29
2019/5/7,8:51 ,AAA,END,15,A-GP,8:49
2019/5/7,11:26,BBB,END,20,A-GP,8:38
2019/5/6,17:04,CCC,OFF,30,A-GP,8:28
2019/5/6,17:58,AAA,OFF,15,A-GP,8:49
2019/5/6,19:21,BBB,END,20,A-GP,8:36
2019/5/5,17:04,CCC,OFF,30,A-GP,8:31
2019/5/5,18:40,AAA,OFF,15,A-GP,8:48
2019/5/5,22:34,BBB,OFF,20,A-GP,8:30
2019/5/2,19:10,AAA,OFF,15,A-GP,8:51
2019/5/2,23:28,BBB,OFF,20,A-GP,8:52

csv2(元):time_tmp2.csv
日付,U_NO,名前,using_time
2019/5/2,15,AAA,8:23:09
2019/5/2,20,BBB,10:33:02
2019/5/5,30,CCC,7:34:01
2019/5/5,15,AAA,8:50:37
2019/5/5,20,BBB,11:43:57
2019/5/6,30,CCC,7:33:15
2019/5/6,15,AAA,7:54:07
2019/5/6,20,BBB,8:05:25
2019/5/7,30,CCC,0:01:00
2019/5/7,15,AAA,0:01:00
2019/5/7,20,BBB,2:14:36

作成後のcsv(目的としている結果):csv_tmp3.csv
日付1,T_name,名前,ON1,OFF1,using_time
2019/5/7,A-GP,AAA,8:29,8:30,0:01:00
2019/5/7,A-GP,BBB,8:49,8:51,2:14:36
2019/5/7,A-GP,CCC,8:38,11:26,0:01:00
2019/5/6,A-GP,AAA,8:28,17:04,7:54:07
2019/5/6,A-GP,BBB,8:49,17:58,8:05:25
2019/5/6,A-GP,CCC,8:36,19:21,7:33:15
2019/5/5,A-GP,AAA,8:31,17:04,8:50:37
2019/5/5,A-GP,BBB,8:48,18:40,11:43:57
2019/5/5,A-GP,CCC,8:30,22:34,7:34:01
2019/5/2,A-GP,AAA,8:51,19:10,8:23:09
2019/5/2,A-GP,BBB,8:52,23:28,10:33:02

そのためのコードとして、以下を作成しました

sub csv_add2()

Dim a, c, cr, cv, d(), fa, fb, fc, i, p, so, t1, t2, x , pp

'使用情報 - 入力ファイル
fa = "csv_tmp2.csv"

'利用時間情報 - 入力ファイル
fb = "time_tmp2.csv"

'出力フォーマット - 出力ファイル
fc = "csv_tmp3.csv"
Set so = CreateObject("Scripting.FileSystemObject")
p = so.GetParentFolderName(WScript.ScriptFullName)
Set cv = so.OpenTextFile(p & "\" & fb, 1)

'利用時間情報をカンマ区切りで保持
t2 = Split(cv.ReadLine, ",")
c = - 1

'利用時間情報のレコード数分実施
Do Until cv.AtEndOfStream

'利用時間情報をカンマ区切りで保持
a = Split(cv.ReadLine, ",")
c = c + 1

'利用時間情報を1レコードずつ読み込む
ReDim Preserve d(3, c)
For i = 0 to 3
d(i, c) = a(i)
Next
Loop

cv.Close

Set cv = Nothing
Set cv = so.OpenTextFile(p & "\" & fa, 1)
t1 = cv.ReadLine
Set cr = so.OpenTextFile(p & "\" & fc, 2, True)

'ヘッダーを付与
cr.WriteLine "日付1,T_name,名前,ON1,OFF1,using_time"

'使用情報のレコード数分実施
Do Until cv.AtEndOfStream
x = cv.ReadLine

'使用情報をカンマ区切りで保持
a = Split(x, ",")

'使用情報より、使用するカラムを選択して順番を並べ替える
pp = a(0) & "," & a(5) & "," & a(2) & "," & a(6) & "," & a(1)
For i = 0 to c
If a(4) = d(1, i) Then
' If a(4) = d(1, i) and a(0) = d(0, i) Then

'ここで、[日付]と[U_NO]に紐づけた[利用時間(using_time)]をレコードの最後につける
cr.WriteLine pp & "," & d(3, i)
Exit For
End If
Next
Loop

'バッファを Flush してファイルを閉じる
cv.Close
cr.Close
Set cv = Nothing
Set cr = Nothing
Set so = Nothing

end sub




上記のコードで実施したことろ、以下のように出力されてしまい、
「目的としている結果」の値が出力できません

実出力csv(出力された結果):
日付1,T_name,名前,ON1,OFF1,using_time
2019/5/7,A-GP,AAA,8:29,8:30,"08:23:09"
2019/5/7,A-GP,BBB,8:49,8:51,"10:33:02"
2019/5/7,A-GP,CCC,8:38,11:26,"07:34:01"
2019/5/6,A-GP,AAA,8:28,17:04,"08:23:09"
2019/5/6,A-GP,BBB,8:49,17:58,"10:33:02"
2019/5/6,A-GP,CCC,8:36,19:21,"07:34:01"
2019/5/5,A-GP,AAA,8:31,17:04,"08:23:09"
2019/5/5,A-GP,BBB,8:48,18:40,"10:33:02"
2019/5/5,A-GP,CCC,8:30,22:34,"07:34:01"
2019/5/2,A-GP,BBB,8:51,19:10,"10:33:02"
2019/5/2,A-GP,CCC,8:52,23:28,"07:34:01"



できなかったこと:
①using_timeの値が、「名前」ごとにすべて同じ値になってしまっている
(time_tmp2.csvの各「名前」の最上位の「using_time」の値になっている)
②using_timeのフォーマットが「"hh:mm:ss"」になっている

コードを何度か見直して試してみたのですが、
狙った結果が取得できませんでした。

どのように修正すればいいのでしょうか?
お分かりになられるかた、
申し訳ございませんがご教授願います

閲覧数:
27
回答数:
1
お礼:
50枚

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

lin********さん

2019/5/721:28:46

質問者のプログラムを、そのまま実行すると、

日付1,T_name,名前,ON1,OFF1,using_time
2019/5/7,A-GP,CCC,8:29,8:30,7:34:01
2019/5/7,A-GP,AAA,8:49,8:51,8:23:09
2019/5/7,A-GP,BBB,8:38,11:26,10:33:02
2019/5/6,A-GP,CCC,8:28,17:04,7:34:01
2019/5/6,A-GP,AAA,8:49,17:58,8:23:09
2019/5/6,A-GP,BBB,8:36,19:21,10:33:02
2019/5/5,A-GP,CCC,8:31,17:04,7:34:01
2019/5/5,A-GP,AAA,8:48,18:40,8:23:09
2019/5/5,A-GP,BBB,8:30,22:34,10:33:02
2019/5/2,A-GP,AAA,8:51,19:10,8:23:09
2019/5/2,A-GP,BBB,8:52,23:28,10:33:02

になりましたが、「If a(4) = d(1, i) Then」を「 If a(4) = d(1, i) and a(0) = d(0, i) Then」に代えて実行すると(私は、こちらが正しいと思います)、

日付1,T_name,名前,ON1,OFF1,using_time
2019/5/7,A-GP,CCC,8:29,8:30,0:01:00
2019/5/7,A-GP,AAA,8:49,8:51,0:01:00
2019/5/7,A-GP,BBB,8:38,11:26,2:14:36
2019/5/6,A-GP,CCC,8:28,17:04,7:33:15
2019/5/6,A-GP,AAA,8:49,17:58,7:54:07
2019/5/6,A-GP,BBB,8:36,19:21,8:05:25
2019/5/5,A-GP,CCC,8:31,17:04,7:34:01
2019/5/5,A-GP,AAA,8:48,18:40,8:50:37
2019/5/5,A-GP,BBB,8:30,22:34,11:43:57
2019/5/2,A-GP,AAA,8:51,19:10,8:23:09
2019/5/2,A-GP,BBB,8:52,23:28,10:33:02

となりました。

「目的としている結果」としている結果とは異なるものの、こちらで合っているように思えるのですが・・・

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる