VBSでCSVのキー項目の取得
VBSでCSVファイル(UnicodeBE BOMなし)内のデータを
キー項目(コード)ごとに分け、
それぞれ別のCSVファイルに出力しようとしています。
(ファイル名にコードを付与することで別々にします。)
しかし、キー項目の取得に失敗しているようで
分岐処理が正しく行われていません。
CSVファイル(test_in.csv)は以下のような形式です。
(実際のファイルに項目行はありません)
連番,コード,フラグ,日付
1,0001,A,20091001
2,0002,A,20091001
3,0002,U,20091002
4,0001,D,20091003
以前、こちらで質問し、ご回答頂いた内容を基に
処理を実装しました。
Option Explicit
Dim iSt
Dim tPath
Dim oFso
Dim stdOut
Dim aLine
Dim field
Dim wk
Set iSt = WScript.CreateObject("ADODB.Stream")
iSt.Open
iSt.Type = 2 'バイナリ
iSt.Charset = "UTF-16BE"
iSt.LoadFromFile("test_in.csv")
iSt.LineSeparator = -1 'CRLF
iSt.Position = 0
tPath = "E:\\test_out.csv"
Set oFso = CreateObject("Scripting.FileSystemObject")
Set stdOut = CreateTextFileBE(oFso,tPath)
Do While Not iSt.EOS
aLine = iSt.ReadText(-1)
field = split(aLine,",")
aLine = join(field,",")
if field(1) = "0002" then
WriteLine stdOut,aLine
end if
Loop
iSt.Close
oFso.Close
Set iSt = Nothing
Set oFso = Nothing
WScript.Quit
Function CreateTextFileBE(fso,Path)
fso.CreateTextFile(Path).Write Chr(&HFE) & Chr(&HFF)
Set CreateTextFileBE=fso.OpenTextFile(Path,8,,True)
End Function
Sub WriteLine(stdOut,Line)
stdOut.Write Line & vbCrLf
End Sub
0002のレコードが入ったCSVファイルを出力しようとしましたが、
レコードなしのCSVファイルが作成されてしまいます。
コードごとにファイルを分ける処理についてもよくわからず、
取りあえずコードを限定し1ファイルだけの出力にしています。
お礼
回答ありがとうございます。こんなややこしいことに回答いただけて本当にうれしいです。 Msgbox(IsArray(itemValueList)) はTrueが返ってきたので配列だとわかりました。 Msgbox(itemValueList)は, "実行時エラー: 型が一致しません。"と怒られてしまいました。やっぱりこいつが何かの原因と思われてしかたありません。 TypeName(itemValueList)の値は, String()でした。 文字列の配列ですね... 補足ですが, itemValueListのUBoundとLBoundは共に0でした... ついでですが, WScript.Stdout.Writeを使うと, cscriptと打って, コマンドラインから使わなくてはいけませんが, 大量に表示しなくてはいけない場合が私の場合多くあって, MsgBoxだと苦痛なのです。OKを何回も押さなくてはいけないので...