質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.57%

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

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 396

amatsuno

score 40

現在、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"」になっている

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

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

追記、
コード内の
If a(4) = d(1, i) Then
'        If a(4) = d(1, i) and a(0) = d(0, i) Then
の箇所ですが、
上側で実施すると、日付毎のソートがされず、
下側で実施すると、そもそも2つのcsvの結合に失敗する
(結合結果が0件となる)

という状況です

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • torisan

    2019/05/10 11:11 編集

    こちらで再現した所、(追記のif文も含めて)記述とは異なる結果になりました。
    VBScript は詳しくない為、こちらの手順が違う可能性がありますが、今一度
    元データ・結果・ソースがこれで正しいか確認をお願いできますでしょうか。

    キャンセル

  • amatsuno

    2019/05/10 11:48

    すいません。
    原因が判明しました。
    ②側:
    (元)になるcsvを出す処理側で、日付フォーマットを明示的に指定していなかったため、
    日付の=条件に合致ませんでした。

    ①については、
    If a(4) = d(1, i) and a(0) = d(0, i) Then
    のコードで実施すtることにより対応できました

    キャンセル

  • 退会済みユーザー

    2019/05/10 12:03

    複数のユーザーから「問題・課題が含まれていない質問」という意見がありました
    teratailでは、漠然とした興味から票を募るような質問や、意見の主張をすることを目的とした投稿は推奨していません。
    「編集」ボタンから編集を行い、質問の意図や解決したい課題を明確に記述していただくと回答が得られやすくなります。

回答 1

check解決した方法

0

すいません。
原因が判明しました。
②側:
(元)になるcsvを出す処理側で、日付フォーマットを明示的に指定していなかったため、
日付の=条件に合致ませんでした。

①については、
If a(4) = d(1, i) and a(0) = d(0, i) Then
のコードで実施すtることにより対応できました

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/05/10 14:13

    ご回答者様

    ベストアンサーのつけ方がよくわからず、申し訳ございませんでした
    (ある日数以上たつとつけられなくなるのでしょうか?)

    キャンセル

  • 2019/05/10 14:32

    今までやり取りをされていた場所は「質問への追記・修正、ベストアンサー選択の依頼」の欄なので「回答」ではありません。
    回答ではないのでベストアンサーを選ぶことはできません。
    ご自身で原因が特定でき、解決できたのであれば「自己解決」という対応で問題ないと思います。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.57%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る