質問: vbsでソート&ファイル分割 vbscriptでcsvファイルを最大5件のレコードになるように ファイル分割しようとしています。 ただし、同じコードが複数のファイルに分かれないようにしたいです。 入力するcsvファイル(test_in.csv)は以下のような形式です。 (実際のファイルに項目行はありません) 連番,コード,フラグ,日付 01,0001,a,20091001 02,0002,a,20091001 03,0003,a,20091002 04,0001,u,20091003 05,0003,d,20091003 06,0004,a,20091003 07,0005,a,20091003 08,0001,d,20091005 09,0006,a,20091003 10,0006,a,20091003 ※入力ファイルに同じコードのレコードが5件を超えることはありません) 上記の入力ファイルの場合は以下の3つのファイルに分割することになります。 【test_out_001.csv】 01,0001,a,20091001 04,0001,u,20091003 08,0001,d,20091005 02,0002,a,20091001 【test_out_002.csv】 03,0003,a,20091002 05,0003,d,20091003 06,0004,a,20091003 07,0005,a,20091003 【test_out_003.csv】 09,0006,a,20091003 10,0006,a,20091003 ※コード"0003"のレコードは2件あるので、test_out_001.csvには出力せず、 test_out_002.csvに出力します。 コード"0006"についても同様でtest_out_003.csvに出力します。 処理の手順としては 入力ファイルのデータをコードでソートし、 1ファイルに5件を超えないように追加していくのかと思いますが、 ソートと5件制限はどのように記述すればよいでしょうか?
回答: 5件ずつ、しかもコードが生き別れにならない出力の例です。 sub writedata() dim jis, utf, f, t, n, e, c, p f = 0 n = 0 do until f > cnt set jis = createobject("adodb.stream") jis.open jis.type = 2 jis.charset = "shift_jis" n = n + 1 p = "c:\ok\csv\t" & right("00" & cstr(n), 3) & ".csv" e = f + 4 if e < cnt then c = blk(e).code if c = blk(e + 1).code then do e = e - 1 if c <> blk(e).code then exit do loop end if end if do jis.writetext blk(f).seq & "," jis.writetext blk(f).code & "," jis.writetext blk(f).flag & "," jis.writetext blk(f).date & vbnewline f = f + 1 if f > cnt then exit do loop until f > e jis.seteos jis.position = 0 set utf = createobject("adodb.stream") utf.open utf.type = 2 utf.charset = "utf-16" jis.copyto utf jis.close set jis = nothing utf.savetofile p, 2 utf.close set utf = nothing loop end sub