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

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

新規登録して質問してみよう
ただいま回答率
85.48%
VBScript

VBScript(Visual Basic Scripting Edition)はMicrosftが開発したスクリプト言語であり、Visual Basicのサブセットです。

Q&A

解決済

1回答

366閲覧

VBSで、指定の日付が設定されているカラムを含む行を削除したい

amatsuno

総合スコア54

VBScript

VBScript(Visual Basic Scripting Edition)はMicrosftが開発したスクリプト言語であり、Visual Basicのサブセットです。

0グッド

0クリップ

投稿2019/04/16 08:20

VBSで、指定の日付が含まれているカラムを持っている行を削除したいと考えています.

前提として、csvファイルは必ず実行した日(ここでは、4/18)がら12日分前までが出力されるものとします。
(これは、別バッチで指定している処理なので、変わりません)

vbsは、csvと同じフォルダ内に格納しております

この前提の下、
VBSを4/18日に実行した場合に、下記のexp_log.csvをcut_log.csvのように出したいと思っています

実行時の処理:実行日(2019/04/18)と12日前(2019/04/06)が第1カラムに設定されている行を削除
(前日から10日前のデータを出したいと思っています)

上記を達成しようと、コードを記載(記載したコード)したのですが、
インデックスが有効範囲にありません。;'a'
と出力され、エラーとなります

なぜ上記のエラーが出るのか?
また、どのようにコードを修正すればよいのか?
お分かりになられる方、申し訳ございませんがご教授願います

元ファイル:exp_log.csv

date2,time,user,u_no,操作
2019/04/06,10:00:00,AAA,1,開始
2019/04/06,10:30:00,BBB,2,開始
2019/04/07,10:00:00,AAA,1,開始
2019/04/07,10:30:00,BBB,2,開始
2019/04/08,10:00:00,AAA,1,開始
2019/04/08,10:30:00,BBB,2,開始
2019/04/09,10:00:00,AAA,1,開始
2019/04/09,10:30:00,BBB,2,開始
2019/04/10,10:00:00,AAA,1,開始
2019/04/10,10:30:00,BBB,2,開始
2019/04/11,10:00:00,AAA,1,開始
2019/04/12,10:30:00,BBB,2,開始
2019/04/13,10:00:00,AAA,1,開始
2019/04/13,10:30:00,BBB,2,開始
2019/04/14,10:00:00,AAA,1,開始
2019/04/14,10:30:00,BBB,2,開始
2019/04/15,10:00:00,AAA,1,開始
2019/04/15,10:30:00,BBB,2,開始
2019/04/16,10:00:00,AAA,1,開始
2019/04/16,10:30:00,BBB,2,開始
2019/04/17,10:30:00,BBB,2,開始
2019/04/18,10:00:00,AAA,1,開始

結果ファイル:cut_log.csv

date2,time,user,u_no,操作
2019/04/07,10:00:00,AAA,1,開始
2019/04/07,10:30:00,BBB,2,開始
2019/04/08,10:00:00,AAA,1,開始
2019/04/08,10:30:00,BBB,2,開始
2019/04/09,10:00:00,AAA,1,開始
2019/04/09,10:30:00,BBB,2,開始
2019/04/10,10:00:00,AAA,1,開始
2019/04/10,10:30:00,BBB,2,開始
2019/04/11,10:00:00,AAA,1,開始
2019/04/12,10:30:00,BBB,2,開始
2019/04/13,10:00:00,AAA,1,開始
2019/04/13,10:30:00,BBB,2,開始
2019/04/14,10:00:00,AAA,1,開始
2019/04/14,10:30:00,BBB,2,開始
2019/04/15,10:00:00,AAA,1,開始
2019/04/15,10:30:00,BBB,2,開始
2019/04/16,10:00:00,AAA,1,開始
2019/04/16,10:30:00,BBB,2,開始
2019/04/17,10:30:00,BBB,2,開始

記載したコード:
sub date_del()

Dim n_date
Dim t_date
Dim o_date
Dim a, cr, cv, so, x

'yyyy/mm/dd hh:mm:ss 形式の文字列で現在日時を取得
n_date = Now()
t_date = Left(N_date, 10)
o_date = dateadd("d", -12, t_date)

Set so = CreateObject("Scripting.FileSystemObject")
Set cv = so.OpenTextFile("C:\exp_log.csv", 1)
Set cr = so.OpenTextFile("C:\cut_log.csv", 2, True)

x = cv.ReadLine
cr.WriteLine x
Do Until cv.AtEndOfStream
a = Split(cv.ReadLine, ",")

If a(0) = t_date and a() = o_date Then

else
objOutput.WriteLine x

End If
cr.WriteLine Join(a, ",")
Loop
cv.Close
cr.Close
Set cv = Nothing
Set cr = Nothing
Set so = Nothing

end sub

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

22行目でa()となっているからでは。

VBScript

1If a(0) = t_date and a() = o_date Then 23If a(0) = t_date and a(0) = o_date Then

他にもおかしそうなところがあったので追記します。
else側の処理でobjOutputを使っているがどこでもセットしていない変数です。
ここはcrになるのではないでしょうか。
ただし書き込んでいる変数xはループ外で1回代入しただけなので同じものが書き込まれてしまいます。
ReadLineを直接Splitに入れるのではなく、一旦xに受け取る必要があります。
またEnd IfのあとのWriteLineの処理は不要かと思います。

VBScript

1 x = cv.ReadLine 2 cr.WriteLine x 3 Do Until cv.AtEndOfStream 4 x = cv.ReadLine 5 a = Split(x, ",") 6 If a(0) = t_date and a(0) = o_date Then 7 8 else 9 cr.WriteLine x 10 End If 11 Loop 12

投稿2019/04/17 06:30

編集2019/04/17 06:36
ttyp03

総合スコア16998

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

amatsuno

2019/04/17 06:37

ありがとうございます。 上記のご指摘をもとに、修正してみます
amatsuno

2019/04/17 23:59

ありがとうございます。 上記のコードをもとに修正いたしました (動作できることを確認いたしました)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問