プロが教えるわが家の防犯対策術!

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ファイルだけの出力にしています。

A 回答 (3件)

> if field(1) = "0002" then



if field(0) = "0002" then
ではありませんか?
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
先頭の「連番」ではなく、二つめの「コード」で判定をします。
ですので配列の添字は0から始まるので
二つめを表すfield(1)であっていると思います。

お礼日時:2009/11/04 21:46

>Do While Not iSt.EOS


>aLine = iSt.ReadText(-1)
・・・
>Loop

何回ループしていますか?
ReadTextの引数を見ると、一遍に読み込んでいるようですが。
http://msdn.microsoft.com/ja-jp/library/cc389881 …

この回答への補足

ご回答ありがとうございます。
ご指摘のとおり、一度に全て読み込んでいました。
iSt.ReadText(-2)に修正し、一行ずつ読み込むようにしました。

補足日時:2009/11/04 21:48
    • good
    • 0

>iSt.ReadText(-2)に修正し、一行ずつ読み込むようにしました。



で、問題は未解決のままですか?
今度はどういう問題があるのですか?
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
1ファイル出力については正常終了しましたので
この質問は締め切らせて頂きます。

お礼日時:2009/11/06 09:47

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!