« 「すぐわかるPerl」 7.8 演算子「=~」 | トップページ | 「すぐわかるPerl」 7.10 リストコンテキストの »

2008年7月 1日 (火)

「すぐわかるPerl」 7.9 splitとjoin

splitは文字を分割し、リストコンテキストでは全文分割結果を、スカラーコンテキストでは分割した個数を返す。

split(/区切り文字のパターン/,区切る対象,区切る上限個数)
split(/区切り文字のパターン/,区切る対象) # 区切れる限り区切ります
split(/区切り文字のパターン/) # 例のあれ $_ を区切ります
split # 空白文字で区切ります

joinは逆。

join(間にはさむ文字列,くっつける文字列のリスト)

例として、表計算ソフトのタブ区切りのデータをカンマ区切りに直す。

while(<STDIN>){
print join(",",split)."\n";
}

これは受け取った文字列を1行1行処理して
joinで , を間に挟み、くっつける文字列のリストがsplit、空白?ん??

あ、この場合のsplitは単に空白で区切るって意味か。
ん?でも、カンマで区切っているんだよなぁ。このsplitって何?
わからん・・・
空白をカンマに置換、ではないし・・・

あと、\nの前の「.」。これも何だ?
抜くとsyntaxエラーになるし・・・わからん。
正規表現?違うような。

わからないまま時間が過ぎるんで、先に進む。
そのうちわかる日が来るさ・・・たぶん。

でも、こういうところで疑問がわいたら、誰に聞けばいいんだろう・・・

さて。
CSVはデータが数字ではない場合に二重引用符で囲んでいる。
その場合も考えて、次のように変換

while(<STDIN>){     #一行ずつ受け取り
@elements = split;   #@elementsを空白文字で分割する
foreach(@elements){   #@elementsがなくなるまで下のループ文を実行
  if(/\D+/){   #ifによる条件分岐。\Dは数字以外[^0-9]。数字以外のものにマッチすれば真。
   $_ = "\"$_\"";  #if文が真の場合には$_の前後に"をつける。
  }
}
print join(",",@elements)."\n";  #joinでリスト@elementsを,でくっつけてprint
}

|

« 「すぐわかるPerl」 7.8 演算子「=~」 | トップページ | 「すぐわかるPerl」 7.10 リストコンテキストの »

Perl」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/214806/41702523

この記事へのトラックバック一覧です: 「すぐわかるPerl」 7.9 splitとjoin:

« 「すぐわかるPerl」 7.8 演算子「=~」 | トップページ | 「すぐわかるPerl」 7.10 リストコンテキストの »