VBS初心者です。
csv処理を作っているのですが、調べても実現できない状況のため、解決策やアドバイスをご教示いただきたく、質問致します。
実現したいこと
次のようなCSVファイルがあります。
日付,場所,天気
5/1,東京,晴れ
6/2,千葉,くもり
7/7,神奈川,雨
1.1行目を読み飛ばす。
2.2行目以降を1行ずつ読込、配列にして必要な部分だけを置換処理する。
晴れ→1 くもり→2 雨→3
3.別のcsvファイルに書き込む。
期待する結果
5/1,東京,1
6/2,千葉,2
7/7,神奈川,3
実行して得られる結果
5/1,東京,1
5/1,6/2,東京,千葉,1,2
5/1,6/2,7/7,東京,千葉,神奈川,1,2,3
DO LOOPで繰り返していく中で、処理済の行の配列?まで次の行で書き込まれるようになってしまいます。
発生している問題・エラーメッセージ
エラーメッセージは出ません。
該当のソースコード
VBScript
1Option Explicit 2 3Dim objFS 4Dim objRFile 5Dim objWFile 6Dim strReadFile 7Dim strWriteFile 8Dim strLine 9Dim AryStrings 10Dim i 11Dim str(2) 12Dim objRegExp 13Dim strRep(2) 14 15strReadFile = "C:\Users\Desktop\read.csv" '元データファイルを開く 16strWriteFile = "C:\Users\Desktop\write.csv" '生成データファイル 17 18Set objFS = Wscript.CreateObject("Scripting.FileSystemObject") 'ファイルシステムオブジェクトをつくる 19Set objRFile = objFS.OpenTextFile(strReadFile) '元データファイルを開く 20Set objWFile = objFS.OpenTextFile(strWriteFile,8,true) '生成データファイルの末尾に追加書き込みをする 21Set objRegExp = New RegExp '正規表現による検索や置換を行うためのオブジェクト 22 23strLine = objRFile.SkipLine '1行目を読み飛ばす 24 25Do until objRFile.AtEndOfStream '最終行を読み込んだら繰り返し終了 26 strLine = objRFile.ReadLine '次の行を読み込む 27 AryStrings = Split(strLine,",") 'カンマ区切りの文字列を配列にする 28 For i = 0 to 2 29 '日付をそのまま入力 30 If i = 0 Then 31 str(i) = str(i) & AryStrings(i) & "," 32 End If 33 '場所をそのまま入力 34 If i = 1 Then 35 str(i) = str(i) & AryStrings(i) & "," 36 End If 37 '天気を番号に変換する 38 If i = 2 Then 39 objRegExp = "晴れ" 40 If AryStrings(i) = objRegExp Then 41 strRep(i) = Replace(AryStrings(i),"晴れ","1") 42 End If 43 objRegExp = "くもり" 44 If AryStrings(i) = objRegExp Then 45 strRep(i) = Replace(AryStrings(i),"くもり","2") 46 End If 47 objRegExp = "雨" 48 If AryStrings(i) = objRegExp Then 49 strRep(i) = Replace(AryStrings(i),"雨","3") 50 End If 51 str(i) = str(i) & strRep(i) & "," 52 End If 53 'ファイルに書き込み 54 objWFile.Write(str(i)) 55 Next 56Loop 57 58objRFile.Close 59objWFile.Close 60 61Set objFS = Nothing 62Set strReadFile = Nothing 63Set strWriteFile = Nothing 64Set objRFile = Nothing 65Set objWFile = Nothing 66Set strLine = Nothing 67Set AryStrings = Nothing 68Set i = Nothing 69Set str(2) = Nothing 70Set objRegExp = Nothing 71Set strRep(2) = Nothing
何卒、よろしくお願い致します。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/16 06:02