更新了显示文件迭代的答案。
我将结果放入哈希中,以便可以使用键值对来操作数据。可以为测量单位等添加新键。
runData_20130620.txt
-活动
持续时间 09.87,-总距离 100.0m -活动
持续时间 15:19,-总距离 4.98km -活动
持续时间 03:00, -总距离 1.0 英里 -活动持续时间 21:14,-总
距离 3.68,-产生的汗水 5.99 加仑-活动
持续时间 22:31,-总距离 3.65 英里
代码
File.foreach("runData_20130620.txt") do |line|
# Create hash, parsing string with regex pattern
runData = Hash[*line.scan(/([^, \-]\D*) (\d*[.:]\d*)/).to_a.flatten]
# This will convert the string keys to symbols, replacing white-space with
# underscores and downcasing
runData = Hash[runData.map { |k,v|
[k.gsub(/\s+/, "_").downcase.to_sym, v] }]
# display results
#runData.each { |k,v| puts "#{k} ** #{v}" }
# display using hash symbol access...
puts "\nRan a distance of #{ runData[:total_distance]} in
runData[:active_duration]} "
puts "Man, I am unfit!" if runData[:sweat_produced]
end
结果
在 09.87 跑了 100.0 的距离
在 15:19 跑了 4.98 的距离
在 03:00 跑了 1.0 的距离
在 21:14 跑了 3.68 的距离
伙计,我不适合!
在 22:31 跑了 3.65 的距离