2016年6月15日水曜日

BATファイル CSVの読み込み

WindowsコマンドプロンプトのバッチファイルでCSVファイルを読み込んで逐次処理をするにはfor文を使う。 たとえば、次のようなカンマ区切りのCSVファイルがあったとする。 列は3つあり、1行目は列名のヘッダである。

品目,単価,個数
りんご,98,10
みかん,30,20
キウイ,78,30

このCSVを読み込んで表示するバッチは以下のようになる。

for /f "skip=1 tokens=1,2,3* delims=," %%i in (data.csv) do (
    echo 品目=%%i 単価=%%j 個数=%%k
)
このバッチはCSVファイルdata.csvを開き各行をを順次for文で処理する。 for文にオプションskip=1 を付け1行目のヘッダ行は無視するようにする。 また、列が3つあるのでtokens=1,2,3*を指定している。このとき読み込んだ列はそれぞれ変数%%i, %%j, %%kに入る。for文に指定しているのは%%iだけだが、forの仕様としてi,j,k...のアルファベット順の変数に列の値が自動で入る。 列の区切り文字はdelims=, オプションで指定する。

このバッチで先のCSVファイルを読み込むと次のような感じになる。

C:\Temp>readcsv.bat
品目=りんご 単価=98 個数=10
品目=みかん 単価=30 個数=20
品目=キウイ 単価=78 個数=30

データ中にカンマが入っているとそこが区切りと認識されるのでこの方法ではうまく動かないが、 簡単にCSVファイルを処理したい場合は十分役立つのではと思う。