所以我在这里看到了关于如何写入外部文本文件的问题等。 例如,将我的哈希值写入另一个文件:
hash = {
Key1: Value1,
Key2: Value2
}
open(FileToWriteTo, 'w') do |f|
hash.each { |key, value| f.puts "#{key}: #{value}" }
但我想要实现的是,如果我运行程序并在我的哈希列表中添加一些东西,那么下次我运行并显示哈希时,新的添加将在那里。这是我用来添加到我的哈希码的代码:
puts "Type 'add' to add an item to the hash"
choice = gets.chomp.downcase
case choice
when 'add'
puts "What do you want to add?"
addition = gets.chomp
if hash[addition.to_sym].nil?
puts "What value will #{addition} have? (integer)"
add_value = gets.chomp
hash[addition.to_sym] = add_value.to_i
puts "#{addition} has been added with a value of #{value}."
else
puts "That item already exists! Its value is #{hash[addition.to_sym]}."
end
因此,如果我添加项目,重新运行程序并选择显示而不是添加,我应该如何显示最后一个添加项目。感谢。
答案 0 :(得分:1)
以下是您可以使用的代码。它利用yaml
来存储哈希值。
require 'yaml'
file = '/tmp/test.yml'
if File.exists?(file)
hash = YAML::load_file(file) # load yaml
else
hash = Hash.new
end
puts "Type 'add' to add an item to the hash"
choice = gets.chomp.downcase
if choice == 'add'
puts "What do you want to add?"
addition = gets.chomp
if hash[addition.to_sym].nil?
puts "What value will #{addition} have? (integer)"
add_value = gets.chomp
hash[addition.to_sym] = add_value.to_i
puts "#{addition} has been added with a value of #{add_value}."
else
puts "That item already exists! Its value is # {hash[addition.to_sym]}."
end
end
File.open(file, 'w') {|f| f.write hash.to_yaml } #store yaml
答案 1 :(得分:-1)
如果我正确理解了这个问题,你想要显示添加的选项。
由于您正在使用该文件并重新运行代码,因此最好在开始时读取文件(并将其存储在哈希值中),并将新项目(key-val)附加到文件。 因此,每当有人添加内容时,请将其附加到文件中。现在,当您在开始时再次读取文件时,它已更新。
如果这不是您的使用案例,请告诉我。