我有一个文件检查和排序脚本。现在,我想让用户选择他/她希望如何对最终输出进行排序。遗憾的是,Ruby似乎忽略了get命令。如果我注释掉整个部分,脚本会完成得很好。请忽略def读数。我还没读完那本书...
所以我的问题是:为什么Ruby跳过get命令。
class Product
attr_reader :id, :name, :price, :stock
def initialize(id,name,price,stock)
@id = id
@name=name
@price=price
@stock=stock
end
def readout
self.each do |product|
print product.id
print "|"
print product.name
print "|"
print product.price
print "|"
print product.stock
puts ""
end
end
end
products = []
newproducts= []
if ARGV[0] != nil
if File.exist?(ARGV[0])
File.open(ARGV[0] , "r") do |f|
f.each_line do |line|
products << line
end
end
products.each do |product|
data = product.split(",")
newproducts.push(Product.new(data[0].strip, data[1].strip, data[2].strip.to_i, data[3].strip.to_i))
end
puts "What to sort by?"
question = gets.strip
if question == "name"
newproducts.sort! {|a,b| b.name <=> a.name}
elsif question == "price"
newproducts.sort! {|a,b| b.price <=> a.price}
elsif question =="id"
newproducts.sort! {|a,b| b.id <=> a.id}
elsif question == "stock"
newproducts.sort! {|a,b| b.stock <=> a.stock}
else
puts "Wrong Answer."
end
#End of File Check
else
puts "File #{ARGV[0]} does not exist."
end
if ARGV[1] != nil
File.open(ARGV[1], "w") do |f|
newproducts.each do |product|
puts "Added #{product.name} to the file."
data = {product.id, product.name, product.price, product.stock}
f.puts(data)
end
end
#End of ARGV check.
else
puts "No output file assigned."
end
#End of master ARGV check.
else
puts "No command given."
end发布于 2010-11-26 01:11:52
Kernel#gets方法从ARGF而不是$stdin读取数据。这意味着如果给定了命令行参数(或者更准确地说,如果ARGV不为空),它将从ARGV中的文件中读取。只有在其他情况下,它才会从标准输入中读取。
要始终从标准输入中读取,请使用$stdin.gets而不是gets。
https://stackoverflow.com/questions/4279352
复制相似问题