福間@福岡 です。 記事 <19990512230555W.hideo / asahi-net.or.jp> にて、 Koyama Hideo<fa8h-kym / asahi-net.or.jp> さんは書きました: > 初歩的な質問で恐縮ですが > たとえば、Perlで > > $\="\n"; > $,=","; > while(<>){ > chop; > split(/,/); > print @_[0],@_[1],@_[0] + @_[1]; ^ ^ ^ ^ # `$' ですね(^^; これでも一応動くみたいですが。 > } > > あるいは awkで > BEGIN {FS=OFS=","} > { print $1,$2,$1+$2 } > > のような処理を ruby でするにはどのようにするのでしょうか? ARGF.each_line do |line| fields = line.chomp.split(/,/) puts [ fields[0], fields[1], fields[0].to_i + fields[1].to_i ].join(',') end ってな感じでどうでしょう。 上のPerlコードふうに書くと $\ = "\n" $, = "," while gets chomp! fields = split(/,/) print fields[0], fields[1], fields[0].to_i + fields[1].to_i end くらいかな。Perlやawkなどと違って、Rubyでは "1" + "2" は 3 という*数値* ではなく "12" という*文字列*になりますから、明示的に to_i という メソッドを使って整数オブジェクトに変換してあげる必要があります。 # 逆に言うと、オブジェクトは自分自身がどう振る舞うべきかを知っている # ので、文字列なら + や * の代わりに . や x を使わなくちゃいけない、 # といったことを、プログラマの側がわざわざ考えてあげなくても済みます。 # 12 * 3 ==> 36 (整数) # "12" * 3 ==> "121212" (文字列) # [12] * 3 ==> [12, 12, 12] (配列) awkコードふうなら #!/usr/local/bin/ruby -nal BEGIN { $; = $, = "," } print $F[0], $F[1], $F[0].to_i + $F[1].to_i ってな感じ。-n / -a / -l オプションの意味は perl とだいたい同じです。 Perlの $[ に相当する機能は、残念ながらありません:) --- Yasuhiro Fukuma (福間 康弘) as Yasu.F @ Kitakyushu.Fukuoka.Japan Web site: http://www8.big.or.jp/~yasuf/ “InterNIC is NOT NSI!”