[pgsql-jp: 32902] Re: 2重引用符でくくられた文字列を含むCSV ファイルをCOPYでインポート

Takayasu Penkiya Iwanashi takayasu @ pooh3.a.perfect-liberty.or.jp
2004年 5月 6日 (木) 11:53:06 JST


岩梨です。どなたも書かないようなので、もう少しだけ、;-)
[このMLらしいアドバイス]という事で書きますと、

> "A,A","BBB",+00000100.01
> と出力されたものが、レコードの中に一部存在してしまっています。
> この場合、copyコマンドは

うまくできなくて当然でしょうからぁ、、それに、
最初のご質問ともかなり主旨?が異なるでしょうしぃ、、

a.項目Aの char(3) の中に , を入れる(今後も残す)という意味(意義?)を
 この際ご一考されて みては、どうでしょう。
 あとあとシンドイだけのような気がしませんか?
b. [,]は、項目Aにしか存在しないのか、BやCにも交じってる可能性は、どう検証
 するのか?(してあるのか?)
c. [,]は、何回(どの程度の割合)、出現するのか?その数によっては、
  元々のデータベースで、置換してから出力、
  textに出してあるのを、スクリプトで置換、などいろいろな解法がありますでしょう。

ということで、あとは一般的?に、現時点での貴方のご質問は、
「["]にくくられた[,]をうまく処理する正規表現は? 」という程度に凝縮できるか
と思います。

ちなみに、前提条件として[,]は項目Aにだけ、2回はでてこない、且つ、
項目Aには[_}が存在しない。という程度に絞れているとするならば、
 cat hoge.txt | sed 's/"\([^"]\)\(,\)\([^"]*\)"/\1_\3/' |  sed 's/\"//g' >keep.txt
でそれなりにできるんじゃないでしょうか。あとは _ => , に戻すとか、適当に処理。
もっとエレガントにできるかもしれませんが、とりあえず10分ほどナヤンでみました;-)
ではでは。
-- Takayasu Penkiya Iwanashi



pgsql-jp メーリングリストの案内