言葉にできるは武器なるらしい

言葉に文字に残していきます何事も。いつかきっと誰かの役に立つはずだから。

【正規表現】n個目のカラムをダブルコーテーションで括る方法

・状況
csvファイルのデータをDBに取込みたい。
だが、csvファイルの中に明細名のカラムが入っていて
「●●明細(1,000円)」
こんな感じで金額表記で明細名が記載されているのため
まさかのカンマがカラム内に存在している。

このまま取込むと、「●●明細(1」と「000円)」にカラムが分かれてしまうためエラーとなる。
なのでどうにか「●●明細(1,000円)」で1カラムとして取込みたい。

csvをtsvに出力し直せるならその方が手っ取り早そうだが、今回はそれはできない。


・やりたいこと
「●●明細(1,000円)」をダブルコーテーションでくくって「"●●明細(1,000円)"」こうすれば1カラムとして取込める。

正規表現で「●●明細(1,000円)」の直前のカンマと直後のカンマをダブルコーテーションをつけて置換する。
(n回目のカンマに"(ダブルコート)をつけて後ろからm個目のカンマに"(ダブルコート)を付ける)


・直前のカンマを置換
 置換前 ([^,]+,){2}
 置換後 $&"

・直後のカンマを置換
 置換前 (,[^,]*){3}$
 置換後 "$&

取込の際は、テキスト修飾子を「"」を指定します(SQLSERVER2008の場合です)
改行コードがLFではNGでCRLFでOKでした

今回ドンピシャでやりたいことがググってもなかなか出てこなかったのでメモメモ。。。