0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

BATを使ってCSVファイルの中身を一行ずつ別々のファイルに出力する

Last updated at Posted at 2024-04-02

背景

アプリの試験用にテストデータを作る必要がありました。
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は利便性高いと改めて実感しました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?