VBSで簡単にCSVを読み込む方法(CSVを小さいDBとして利用する方法)
VBSで簡単にCSVを読み込む方法(CSVを小さいDBとして利用する方法)
ECモールへのアクセスを構築しようとすると、どうしてもIDとPASSのリストが必要になります。
ExcelVBAで実装している場合はExcelの中に書けばいいですが、VBSの場合ベースとなるExcelは標準装備ではありません。その為、CSVデータを簡易DBとして活用する事になります。
そんな方法を備忘録として記しておきます。
CSVを読み込むコード
Option Explicit
Dim objFso
Dim filePath
Dim objFile
Dim aryRet()
Dim i
Dim objWshShell
Dim aryStrings
Dim objMall
Set objFso = WScript.CreateObject("Scripting.FileSystemObject")
Set objWshShell = WScript.CreateObject("WScript.Shell")
'ファイルの相対パス※絶対パスでももちろんOK
filePath = "\..\hogeDB.csv"
Set objFile = objFso.OpenTextFile(objWshShell.CurrentDirectory & filePath )
If Err.Number = 0 Then
'ループカウンタの初期化
i = 0
'ファイルの内容を1行ずつ配列に格納
Do Until objFile.AtEndOfStream
'中身を保ったまま配列の大きさを拡張
redim Preserve aryRet(i)
'1行読み込んで配列に格納
aryRet(i) = objFile.ReadLine
'カウンタ増加
i = i + 1
Loop
'ファイルをクローズ
objFile.Close
Else
'エラーの内容(Description)出力
WScript.Echo "ファイルが開けません: " & Err.Description
End If
CSVを読み込むうえで必須なものは行数の管理です。
でもVBSはインクリメンタル演算子を持たないので『 i++ 』の命令は使えないので『i = i + 1』でカウントを増やします。
CSVの読ませ方
段取りとしてはこんな感じです。
- 読み込みたいCSVファイルを指示して【 OpenTextFile 】でファイルを開く
- 読み込む行数を格納する変数を用意。※先頭から3行飛ばしたい場合は i = 2 から始めればよい
- 1行ずつ配列に格納する。 ※この時点で配列にはカンマ区切りのレコードが行ごとに分けられて格納されている
- 作成した配列を1レコードづつ読込みカラムを分ける
- 目的のカラム番号を指示して目的の値を取得する
上の項で記載したコードを2回転するイメージです。
ファイルの読み込み自体は【 Set objFile = objFso.OpenTextFile(objWshShell.CurrentDirectory & filePath ) 】でOK。
これを【 Do Until objFile.AtEndOfStream ~~~~~ Loop 】にかけ【 aryRet(i) = objFile.ReadLine 】で1レコードずつ取り出します。
1回転目でカンマ区切りレコードの配列が出来上がり、2回転目でそれを分解したカラムを作成となります。
まとめ
ここら辺はいろんなサイトさんで実装方法が記載されているのでとても勉強になりますし、あまり苦になりません。
また、レコードの取り扱い方として最初の読み込み時に多次元配列を作成してしまう方法もあります。
ただ、個人的に『カンマ区切りレコードとして格納しておいて利用するときに詳細を分ける』方が取り扱いが楽だと感じています。

