2022年5月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        
無料ブログはココログ

« explorer.exeの/n,/eスイッチ | トップページ | スクリプトでcsvファイルを整形する。 »

2010年12月 7日 (火)

バッチファイルでcsvファイルを整形する。

すべての値を、空の値も、""で囲みます。
× aaa,b b,,"ddd","e e"
○ "aaa","b b","","ddd","e e"

csvfix.cmd 入力ファイル [出力ファイル]

@echo off
setlocal enabledelayedexpansion
set out=%2
for /f "delims=" %%L in (%1) do call :sub %%L
goto :eof

:sub
set line=%*
set fq=
set fg=
set fb=true
set line2=
set n=0
if not defined line goto :next
:for
  set c=!line:~%n%,1!
  if not defined c goto :next
  if defined fq (
    if !c!==^" set fq=& if defined fg set line2=!line2!^"
  ) else (
    if !c!==^, if not defined fb (
      set fb=true
      if defined fg (
        set fg=
        set line2=!line2!^"
      )
    ) else (
      set line2=!line2!^"^"
    )
    if not !c!==^, if defined fb (
      set fb=
      if not !c!==^" (
        set fg=true
        set line2=!line2!^"
      )
    )
    if !c!==^" set fq=true& if defined fg set line2=!line2!^"
  )
  set line2=!line2!!c!
  set /a n+=1
  goto :for
:next
if defined fq set line2=!line2!^"& if defined fg set line2=!line2!^"
if defined fg set line2=!line2!^"
if defined out (
  echo;!line2!>>out
) else (
  echo;!line2!
)
goto :eof

出力ファイルを省略すると標準出力へ。

バッチ引数が全角空白で区切られるバグへの対策用のバッチファイルを、空白区切りをコンマ区切りに、連続区切りを分離に変えただけです。
http://scripting.cocolog-nifty.com/blog/2009/02/post-1fb0.html

« explorer.exeの/n,/eスイッチ | トップページ | スクリプトでcsvファイルを整形する。 »