,,(半角カンマ2個続き)
↓
,’’,(シングルクォート囲みをカンマで挟む)
の置換をしたい場合の記述はどう書けば良いですか?
tr/,,/,’’,/;
tr/,,/,¥’¥’,/;
tr/¥,¥,/¥,¥’¥’¥,/;
などを試しましたが、いずれも置換されませんでした。
$a=$a2="abcde,,tes,,t";
$a2=~s/,,/,’’,/g;
print "original=".$a."<BR>";
print "convert=".$a2."<BR>";
trではなくs を使ってみてはいかがでしょう
trは正規表現のマッチ、sは直接置換だったと思います
http://www.tohoho-web.com/lng/200001/00010525.htm
[perl] 置換で、tr と s に関する質問
s/,(?=,)/,’’/g
がしたいということですか?
ご回答ありがとうございます。まさにそのとおりです。上手くできました。ありがとうございます。
以降、ご回答いただいているので、一応オープンします。
たぶんCSVデータの取り扱いの話だと思いますが、
http://www.din.or.jp/~ohzaki/perl.htm#CSV2Values
一度、CSVの要素を取り出して、
値が null のものを、’’ に置換し、
http://www.din.or.jp/~ohzaki/perl.htm#CSVfromValues
再度、CSVに変換してやるのが確実でいいと思いますよ。
置換の記述の問題だけだと思っている(実際そうでした)ので、この手の回答は不要です。
s/,(?=,)/,’’/g でどうでしょうか。
古いバージョンのperlだと動かないかもしれません。
またこういうケースでは、必ずしも置換ではなく
split等を組み合わせるとよいかもしれません。
未オープンだった3つ目の回答と同じですね。そのとおりです。ありがとうございました。
置換というよりカンマで分割、空文字列か判定、再結合してみてはどうでしょうか
$data =q|,,,abc,def,,g,,|;
$result = ’’;
$result = join ’,’,map{($_)?$_:”’’”} split /,/,$data,-1;
print $result; # →’’,’’,’’,abc,def,’’,g,’’,’’
そんなに小難しいことは必要ないです。
一部置換できました。
たとえば、
,,,
↓
,’’,’’,
のように置換したい場合に有効な記述はありませんか?
※実際には、カンマの連続はもっとありますが、すべてNULLを’’にしたいというイメージです。