2014-05-03 105 views
1

I've been working on this for a while如何通过10

乘以一个文本文件中每一个数字,但不管我尝试修改只有第一线,而我想10 到multioly每个号码例如:

1
2
3.3
4.5 . . .

应该是:

10
20
33
45

但是我得到的是:

10.0

只有

我已经把这个从计算器问题,并修改了它,但还是同样的结果:

f = File.open("c:/Ruby/m.txt", "r+") 
f.each_line do |line| 
    f.write(line.to_f * 10) 
end 
f.close 

,如果我尝试使用f.puts我会得到一个错误:看跌是一种私人方法?我如何将每个数字乘以10?

回答

2
lines = File.readlines("c:/Ruby/m.txt") 
new_lines = lines.map { |line| (line.to_f * 10).to_i } 

File.open("c:/Ruby/m.txt", "w") { |f| f.puts new_lines } 
+0

我希望你不介意,但为什么在这里做图工作,而不是选择,根据这[博客](http://www.jacopretorius.net/2012/01/ruby-map-collect-and-select.html)它应该返回true,false .... – Mark

+1

@Mark阅读[文档](http://www.ruby-doc.org/core-2.1.1/Enumerable.html#method-i-map)['Enumerable#map'](http://www.ruby-doc.org /core-2.1.1/Enumerable.html#method-i-map) – bjhaid

+0

bjhaid,该示例没有数字,但有多个小数位,但它不知道ñ如果这是一般情况。考虑修改你的答案,使3.45 => 34.5。 –

3

我想你会更好先读文件,然后才写它:

lines = File.readlines("c:/Ruby/m.txt").to_a 
f = File.open("c:/Ruby/m.txt", "w") 
lines.each do |line| 
    f.write((line.to_f * 10).to_i) 
end 
f.close