これつぐです。


[ruby-list:18291] Re: [book] csv_split2 
> けいじゅ@日本ラショナルソフトウェアです.

> $の問題はないようですが, 何かバグがあるみたいです.
> 
> csv_split(',"z","b",b,')
> => ["", "b", "b", ""]

むむむむむ……。
今まで使えていたということは、
最初が空のデータを扱ったことがなかったのか……。

しかしですね、

#!/usr/local/bin/perl
$source = ',"z","b",b,';
@csv = ();
push(@csv, $+) while $source =~ m/(?:^|,)(?:"((?:[^"]|"")*)"|([^,]*))/g;
print(join(":", @csv));

:z:b:b:

となるのです。

正規表現は Perl 互換だと思っていいのですよね?
だとしたら Ruby の正規表現のバグかしら?
(これだけのために Perl をインストールしてしまった……)


> それにこのプログラムは元と違いすぎて採用しづらいなぁ... 
> 
> # 説明部分を大幅に変更する必要が出てしまいますので(^^;;;

すみません。
そこまで意識してませんでした。
単に手元に似たようなのがあったので出してみただけなのです。
ちなみにオリジナルはこれです。

str.scan(/(?:^|,)("(?:[^"]|"")*"|[^,]*)/).flatten