变量魔法并从文件中读取

2024-01-02

假设,我得到以下文件(输入.txt):

name = "Peter"
age = 26
family_status = married

提到的行可以按随机顺序存储,即:

family_status = married
name = "Peter"
age = 26

在我的程序中我也有变量家庭状况, age and name。如何在一个周期内从文件中读取这些行并为相应的变量分配值?


设置变量

这取决于几个事实。

  • 你有什么类型的变量(局部变量、实例变量、类变量或全局变量)
  • family_status 是什么类型(String, Symbol, 任何)

我假设您为此使用实例变量:

def read_vars(io, vars)
  io.each do |line|
    # ensure the line has the right format (name = var)
    raise "wrong format" unless line=~ /^\s*(\w+)\s*=\s*"?(.*?)"?\s+$/
    var= :"@#{$1}"
    # pick the type of the data
    value= case vars[var]
    when String
      $2
    when Integer
      $2.to_i
    when Symbol
      $2.to_sym
    else
      raise "invalid var"
    end
    instance_variable_set(var, value)
  end
end

read_vars(File.read("input.txt", :@age => Integer, :@name => String, :@family_status => Symbol )

如果您不使用实例变量,则必须更改instacne_variable_set and var= :"@...符合您的需求。这段代码有以下优点:

  • 您可以控制可以设置哪些变量
  • 您可以控制这些变量的类型
  • 您可以轻松添加新变量和/或更改变量类型,而无需更改读取代码
  • 您可以使用此代码读取完全不同的文件,而无需为其编写新代码

读取为 YAML

如果您的需求不像您的问题那么具体,我会采取完全不同的方法。

我会写input.txt作为 yaml 文件。在 yaml 语法中,它看起来像这样:

---
name: Peter
age: 26
family_status: :married

您可以通过以下方式阅读:

YAML.load(File.read("input.txt")) # => {"name" => "Peter", "age" => 26, "family_status" => :married }

如果你不控制的话要小心input.txt文件中,您无法控制数据的类型。我会命名该文件input.yaml代替input.txt。如果您想了解更多有关如何编写 yaml 文件的信息,请查看:http://yaml.kwiki.org/?YamlInFiveMinutes http://yaml.kwiki.org/?YamlInFiveMinutes。有关 yaml 和 ruby​​ 的更多信息可以在以下位置找到:http://www.ruby-doc.org/stdlib/libdoc/yaml/rdoc/index.html http://www.ruby-doc.org/stdlib/libdoc/yaml/rdoc/index.html.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

变量魔法并从文件中读取 的相关文章

随机推荐