保存和更新用户/首选项的Ruby命令行程序

保存和更新用户/首选项的Ruby命令行程序,ruby,file,parsing,command-line,stdin,Ruby,File,Parsing,Command Line,Stdin,我正在构建一个应用程序,它接受stdin来保存用户及其首选项。我应该将stdin写入文本文件并将用户输入保存在那里吗 命令行.rb class CommandLine def initialize(filename) @file = File.open(filename, 'w') end def add_user(input) @file = File.open('new_accounts.txt', 'r+') @file.wri

我正在构建一个应用程序,它接受stdin来保存用户及其首选项。我应该将stdin写入文本文件并将用户输入保存在那里吗

命令行.rb

class CommandLine
   def initialize(filename)
      @file = File.open(filename, 'w')   
   end

   def add_user(input)
      @file = File.open('new_accounts.txt', 'r+')
      @file.write(input)
      puts input
   end

   def run
      puts "Welcome to the Command Line Client!"
      command = ''
      while command != 'quit'
      printf "enter command: "
      input = gets.chomp
      parts = input.split
      command = parts[0]
      case command
          when 'quit' then puts 'Goodbye!'
          when '-a'   then add_user(parts[1..-1].join(" "))
          else
            puts 'Invalid command #{command}, please try again.'
          end
      end
   end
end

a = CommandLine.new('new_accounts.txt')
a.run
假设我希望用户在命令行中输入“-a tommy like apples”,我希望它输出:

tommy likes apples
同一用户tommy也可以输入“-tommy喜欢橘子”,然后更新他以前的偏好:

tommy likes oranges

感谢您的帮助/指导,谢谢

如果您正在做一些简单的事情,我认为使用文本文件没有问题。备选方案很多,没有更多的细节,我恐怕不能提出一个好的建议

def add_user(input)
  File.open('new_accounts.txt', 'w') {|file| 
      file.write(input) 
  }
  puts input
end
仅供参考:这将使您的文本文件得以更新。:-)


编辑:更改了“添加用户”方法。

您也在寻找读取文件的示例吗?您可以将信息保存到文本文件中,但数据的存储方式很重要。不要将其保存在CSV或每个用户的一行中。相反,使用Ruby的YAML或JSON类以更通用的格式编写数据,这种格式易于解析和重用。实际上,我会使用某种数据库,这样就可以创建/读取/更新/删除用户信息,而无需每次完全读取或覆盖用户文件。以SQLite为起点。为什么在方法中使用
@
实例变量?为什么不使用
File.open
和一个块,这是惯用的Ruby,因此文件会自动关闭?当
文件时,为什么要使用
r+
权限写入文件。写入
文件。最好使用
w
模式打开
?如果同一用户的信息不止一次出现会发生什么?我只是在OP的代码中添加了一些内容。我会更新。好的一点,不止一次,我应该在回答之前和OP核实更多。我会尝试使用Sequel;这个问题要求简单,因此我认为对于这个命令行应用程序来说,使用DB可能有点过头了。谢谢大家的支持,我会在提问时更新问题的。