[ruby-list:47258] Re: 変則的なCSVデータの処理

From: "NARUSE, Yui" <naruse@...>
Date: 2010-07-22 06:16:06 UTC
List: ruby-list #47258
成瀬です。

2010年7月22日14:38 keiichi matsunaga <ma2@lifemedia.co.jp>:
> On 7/22/2010 2:34 PM, Hideo Konami wrote:
>> 小波です.
>>
>> 次のような行をもつ CSV ファイルがあり,split や scan による切り分けが
>> うまくいかずにはまっています.
>>
>> "Bach, JC","協奏交響曲","C",,,,,"S",,"S",,"S+2","S",2,2,,2,,,,,,,,,,
>> "Beethoven","Pf. 協奏曲第1番","C",15,"S",,,,,,,1,2,2,2,,2,2,,,,"Y",,,,,"18 11 9"
>>
>> 最初のカラム(人名)は '"' と '"' の間に ',' が存在していることがある
>> ので, 単純に split(',')  で切ると当然人名がぶった切れます.また数字
>> だけのレコードはカラムに '"' で挟まずに入っています.
>>
>> たとえば1行目なら次のように nil も入れて配列化したいのですが,うまい
>> やり方があったら教えていただけないでしょうか.
>>
>> ["Bach, JC","協奏交響曲","C",nil,nil,nil,nil,"S",nil,"S+2","S",2,(略) ]
>
> CSV用のライブラリを使うといいのではないでしょうか?
> 僕は FasterCSV(http://fastercsv.rubyforge.org/)ってのを使ってます。

ライブラリを用いるのが正解だと思います。
どのライブラリを使うかについては、松永さん同様FasterCSVが、
* 1.8標準添付のライブラリより高速
* 1.9で標準添付
という理由からオススメです。

-- 
NARUSE, Yui
naruse@airemix.jp

In This Thread