背景
アプリの試験用にテストデータを作る必要がありました。
Pythonを使えば簡単に出来ますが、
都合によりPythonをインストール出来ない環境にあるためbatで実装することにしました。
概要
◇実現したいこと
-対象csvファイルの中身を一行ずつ読み出す。
-読み出した各行を新たなcsvファイルに出力する。※csvファイルの一行目にはヘッダー行を挿入
入出力要件
-Input
ファイル名:test.csv
ヘッダー:有り
行数:N行(N=任意、ヘッダー除く)
-Output
ファイル名:n.csv(n=読み出した行数)
ヘッダー:有り
行数:1行
◇入出力イメージ
Input
test.csv
a | b | c |
---|---|---|
1 | 2 | 3 |
4 | 5 | 6 |
Output
1.csv
a | b | c |
---|---|---|
1 | 2 | 3 |
2.csv
a | b | c |
---|---|---|
4 | 5 | 6 |
処理手順
①対象CSVファイルの存在有無を確認
②ヘッダー行(1行目)を読み出してheader.csvに書き出す。
③2行目以降を読み出して行数分ヘッダー付きでCSV出力する
実装コード
@echo off
rem ①対象CSVファイルの存在有無を確認
set csv_file=test.csv
if not exist %csv_file% (
echo CSVファイルが存在しないため、処理を終了します。
exit
)
rem ②ヘッダー行(1行目)を読み出してheader.csvに書き出す。
for /f "delims=" %%i in (%csv_file%) do (
set header=%%i
echo %%i > header.csv
goto :Jump
)
:Jump
echo %header%
rem ③2行目以降を読み出してヘッダー付きでCSV出力する
setlocal enabledelayedexpansion
set /a cnt=1
for /f "skip=1 delims=" %%i in (!csv_file!) do (
echo !header! > !cnt!.csv
echo %%i >> !cnt!.csv
set /a cnt+=1
)
endlocal
所感
batに慣れていないのと慣れているPythonと変数の寿命がと異なり、for文を複数に分けて実装しなければいけない点で手間取った。
csv操作においてPythonとPandasは利便性高いと改めて実感しました。