1

私の入力ファイルは次のとおりです。

1  
3  
5  
7  
9  

出力ファイルを 1 行に 1 つずつ正方形にしたい:

1  
9  
25  
49  
81  

しかし、私は得ています:

19254981

つまり、行間なし

私のコードは次のとおりです。

a= File.open('inputs')
b= File.open('outputs', 'w')
a.each_line do |one_num|
  one_number = one_num.to_i
  square= one_number * one_number
  b << square
end
4

1 に答える 1

2

putsの代わりに使用し<<ます。

 b.puts square

補足: 1 つの長いメソッド チェーンとしてすべてを実行できます。

File.open('outputs','w').puts(File.open('inputs').readlines.map{ |l| n=l.to_i; n*n })

または、ネストされたブロックとして読みやすくなります。

File.open('outputs','w') do |out|
  File.open('inputs') do |in|
    out.puts( in.readlines.map { |l| n=l.to_i; n*n } )
  end
end

closeどちらのソリューションにも、明示的なステートメント がないにもかかわらず、ダングリング ファイル ハンドルを残さないという利点があります。

于 2012-05-05T01:38:06.713 に答える