バッチファイルで同階層にあるCSVファイル内のの特定文字列を編集します。
前提条件
編集前のCSVファイル:TEST_yyyyMMddhhmmss.csv
編集後のCSVファイル:after_TEST_yyyyMMddhhmmss.csv
特定文字列:電話番号と仮定し、3桁、4桁、4桁のハイフン区切りに編集
補足:フォーマットは以下の例の通り
電話番号は空欄の可能性あり
電話番号の後続列は空欄の可能性あり
例
編集前
1,山田太郎,202-0003,09011112222,男
2,山田次郎,202-0003,,男
3,山田太郎,202-0003,,
編集後
1,山田太郎,202-0003,090-1111-2222,男
2,山田次郎,202-0003,,男
3,山田太郎,202-0003,,
@echo off
setlocal ENABLEDELAYEDEXPANSION
cd %~dp0
set LOG_FILE=%~n0.log
echo [ INFO ] %date% %time% CSVファイルの編集を開始します。 >>%LOG_FILE%
for %%x in (TEST_*.csv) do (
echo %%x
set OUTPUT_FILE=after_%%x
type nul > !OUTPUT_FILE!
for /f "tokens=1-5 delims=," %%a in (%%x) do (
set STRTMP=%%d
if not "!STRTMP!" == "" (
if "!STRTMP:~0, 3!" == "090" (
set STRTMP=!STRTMP:~0, 3!-!STRTMP:~4, 4!-!STRTMP:~7, 4!
echo %%a,%%b,%%c,!STRTMP!,%%e >>!OUTPUT_FILE!
) else (
echo %%a,%%b,%%c,,%%d >>!OUTPUT_FILE!
)
) else (
echo %%a,%%b,%%c,%%d,%%e >>!OUTPUT_FILE!
)
)
)
echo [ INFO ] %date% %time% CSVファイルの編集を終了します。 >>%LOG_FILE%
endlocal
exit /b
ポイント
・delimsでカンマ区切りを指定する。
・tokensで区切った配列のどのインデックスを利用するか決定する。
配列は%%a~%%eで参照可能。
・値が空欄の場合、配列が詰められる。(ココがややこしい)
1列目:配列の長さは5
2列目:配列の長さは4
3列目:配列の長さは3
・「type nul > !OUTPUT_FILE!」を行うことで、1度初期化してから実行している。
・繰り返し処理中は「setlocal ENABLEDELAYEDEXPANSION」~「endlocal」内で
変数は「!XXX!」で参照可能。