2010-11-28 13 views
1

データセットをcsv形式でデータベースにインポートしています。正規表現。「22,09」を「22.09」に置き換えます。

CSVファイルの構造は、この

のようなものです部品番号、説明、Netto価格、Brutto価格、
11009コメント、ボールベアリング、 "22,09"、 "38,05"、 "注:この記事はkoyo xxxxxxと同じです"

私はまだ正規表現に精通していないので、助けてもらえますか?

私のためのPerlスクリプトを書くかもしれません。

だからあなた

+0

どのような回答が欲しいですか?異なる言語では関数名が異なり、正規表現の構文は少し異なります。あなたがperlコードを望むなら、あなたはそのように明示するべきです。 –

+0

まあ、私はちょうどいくつかのファイルに格納されている数千の線を変換したいだけです。私はperlがこの目的には理想的だと思います。あなたが私のために提案する他の方法があれば、あなたは歓迎です – Ragnar123

+0

ほぼ同じhttp://stackoverflow.com/questions/4208923/how-do-i-change-datatype-of-an-imported-spreadsheet-in- mysql – Danosaure

答えて

3

これは必要ありません。それはMySQLだけで行うことができます。

LOAD DATA INFILE 'data.csv' 
INTO TABLE prices 
FIELDS 
    TERMINATED BY ',' 
    ENCLOSED BY '"' 
(partno, desc, @net, @gross, comment) 
SET 
    net=REPLACE(@net, ',', '.'), 
    gross=REPLACE(@gross, ',', '.'), 
+0

ポイント:P –

+0

ありがとう、私はこれが最高のソリューションだと思う! – Ragnar123

0

をありがとう、あなたは浮動小数点数は、二重引用符で区切られた文字列である場合にのみ、カンマを交換したいです。これはあなたが望む正規表現です:

/(?<=")(\d+),(\d+)(?=")/ 

これは{22; 09}および{38; 05}。

3

あなたのCSVファイルを編集するのVim(here's a quickstart)を使用して処理できる場合は、Vimでこのコマンドは、入力が("xx.yy"から"xx,yy")などとして形成されていると仮定すると、あなたが望む行動を与えるだろう:

:%s/"\(\d\+\),\(\d\+\)"/"\1.\2"/g 

:wqを押してファイルを保存し、プログラムを終了することができます。その正規表現(/"(\d+),(\d+)"/)は、正規表現を受け入れる他のプログラム(または言語)の出発点としても役立つはずです。

+0

ありがとう、ちょうど私が必要なもの。私は最近、vimを使い始めました。私はエディタの力が大好きです! – Ragnar123

+0

hehe、私は完全に+をエスケープするのを忘れて、それを遠くまでやってしまった: 'echo '11009、ボールベアリング、" 22,09 "、" 38,05 "、"この記事はkoyo xxxxxx "'| \([0-9] [0-9] * \)、\([0-9] [0-9] * \)/ \ 1 \ 2/g " –

0

Rubyプログラミング言語でこれを行う方法は次のとおりです。

row = 'abc, "22,09", t' 
row.gsub(/([0-9]+),([0-9]+)/, '\1.\2') 
puts row  # result is: abc, "22.09", t 

呼び出しが一連の数字が続くコンマに続く一連の数字を検索しGSUBし、そしてピリオドでカンマを置き換えます。わからない、これは場合に役立ちます。

関連する問題