powershellでのExcelセル内改行を含むCSVファイルのセル内改行変換(条件限定)
セル内改行を含むExcelをCSVにエクスポートするとCRLFではなくLFが入るようです。そのためCSVに意図せぬ改行が入ってしまい、CSV変換したファイルから情報を抜きたい時などに邪魔になってしまいます。そこで、色々調べて「LF改行の前に特定の文字が入る場合」ですが、LF改行をスペースに変換して、かつShist_JISで出力してみました。
※LFだけで置き換えると、CRLFにも影響がでる。
元ファイル
"Excelで(LF) 改行","Excelで(LF) 改行","Excelで(LF) 改行"(CRLF) "Excelで(LF) 改行","Excelで(LF) 改行","Excelで(LF) 改行"(CRLF) "Excelで(LF) 改行","Excelで(LF) 改行","Excelで(LF) 改行"(CRLF)
スクリプト
$TEST_Text = [System.IO.File]::ReadAllText("C:\Users\hoge\ドキュメント\Excel改行テスト.csv",[System.Text.Encoding]::GetEncoding("shift_jis")).Replace("で`n","で ") [System.IO.File]::WriteAllText("C:\Users\hoge\ドキュメント\work\Excel改行テスト_after.csv", $TEST_Text,[System.Text.Encoding]::GetEncoding("shift_jis"))
結果
"Excelで 改行","Excelで 改行","Excelで 改行"(CRLF) "Excelで 改行","Excelで 改行","Excelで 改行"(CRLF) "Excelで 改行","Excelで 改行","Excelで 改行"(CRLF)
ちょっと改良してみる
$TEST_Text = [System.IO.File]::ReadAllText("C:\Users\hoge\ドキュメント\Excel改行テスト.csv",[System.Text.Encoding]::GetEncoding("shift_jis")) -Replace("[^\x00-\x7F]`n","あ ") [System.IO.File]::WriteAllText("C:\Users\hoge\ドキュメント\Excel改行テスト_after.csv", $TEST_Text,[System.Text.Encoding]::GetEncoding("shift_jis")) [^\x00-\x7F] はASCII文字ではない、つまり全角1文字に一致する。なので、全角1文字LF改行のものを「あスペース」に置換する。なのでLFの前の文字は全角であれば何でもよいが置換後の全角文字は決め打ちになってしまう。 正規表現を使えるようにするため、.Replaceではなく、-Replaceに変えている