我正在尝试阅读包含此内容的文本文件
ABC = Thefirststep
XYZ = Secondstep
ABC_XYZ = Finalstep=345ijk!r4+
我可以使用此
逐行读取文件#!/usr/bin/ruby
text = '/tmp/data'
f = File.open(text , "r")
f.each_line { |line|
puts line
}
f.close
我想要做的是将值TheFirststep
Secondstep
和Finalstep
分配给不同的变量。如果我们使用split(),那就更好了。
答案 0 :(得分:2)
您可以使用以下内容:
#!/usr/bin/ruby
text = '/tmp/data'
data = []
f = File.open(text , "r")
f.each_line { |line|
data.push( line.split("=").last)
}
f.close
答案 1 :(得分:0)
你说你想,“将值,'TheFirststep','Secondstep和'Finalstep'分配给不同的变量。
您无法动态创建局部变量(无论如何不是Ruby v1.8)。这留下了两个选择:将这些值分配给实例变量或使用不同的数据结构,特别是散列。
首先让我们创建一个数据文件。
data <=-END
ABC = Thefirststep
XYZ = Secondstep
ABC_XYZ = Finalstep=345ijk!r4+
END
FName = 'test'
File.write(FName, data)
#=> 73
将值分配给实例变量
File.foreach(FName) do |line|
var, value, * = line.chomp.split(/\s*=\s*/)
instance_variable_set("@#{var.downcase}", value)
end
@abc
#=> "Thefirststep"
@xyz
#=> "Secondstep"
@abc_xyz
#=> "Finalstep"
实例变量名称的约定(在"@"
之后)是使用snake-case,这就是我降低它们的原因。
将值存储在哈希
中File.foreach(FName).with_object({}) do |line,h|
var, value, * = line.chomp.split(/\s*=\s*/)
h[var] = value
end
#=> {"ABC"=>"Thefirststep", "XYZ"=>"Secondstep", "ABC_XYZ"=>"Finalstep"}
尽管这很容易,但动态生成实例变量或使用动态创建的键散列并不常见。那是因为它们只有在可以获得并且可能改变它们的值时才有用,这是有问题的。
请注意
var, value, * = line.chomp.split(/\s*=\s*/)
var
等于拆分操作返回的数组的第一个元素,value
是第二个值,*
丢弃剩余的元素(如果有的话)。