Ruby:在散列创建中插入字符串

Ruby:在散列创建中插入字符串,ruby,Ruby,我目前正在尝试编写一个小脚本,用于解析周报(电子邮件)并将所需数据存储在变量中,以便进一步处理它们 这个功能已经开始工作了,但是现在有点被侵入了,我想了解一下代码的理想外观 这是我目前的代码-我将其缩短了一点,使其更通用: activated_accounts_rx = Regexp.new(/example/) canceled_accounts_rx = Regexp.new(/example/) converted_accounts_rx = Regexp.new(/example/)

我目前正在尝试编写一个小脚本,用于解析周报(电子邮件)并将所需数据存储在变量中,以便进一步处理它们

这个功能已经开始工作了,但是现在有点被侵入了,我想了解一下代码的理想外观

这是我目前的代码-我将其缩短了一点,使其更通用:

activated_accounts_rx = Regexp.new(/example/)
canceled_accounts_rx = Regexp.new(/example/)
converted_accounts_rx = Regexp.new(/example/)

File.open("weekly_report.txt") do |f|

    input = f.read

    activated_accounts = input.scan(activated_accounts_rx).join
    canceled_accounts = input.scan(canceled_accounts_rx).join
    converted_accounts = input.scan(converted_accounts_rx).join

end
我想到了这样的事情,我知道这是行不通的,但我不知道如何才能让它起作用:

var_names = ["activated_accounts", 
             "canceled_accounts", 
             "converted_accounts"]

regex = { "#{var_names[0]}": Regexp.new(/example/), 
          "#{var_names[1]}": Regexp.new(/example/) }

File.open("weekly_report.txt") do |f|

    input = f.read

    for name in var_names
        name = input.scan(regex[:#{name}]).join
    end

end
我想以这样的变量结束:

activated_accounts = 13
canceled_accounts = 21
converted_accounts = 5

有人能帮我吗?

您可能不需要为变量设置单独的数组。只需将它们用作散列中的键即可。然后,您可以稍后从另一个哈希访问这些值。更好的是,如果您不再需要正则表达式,您可以用扫描的内容替换该值

regexHash = { 
              activated_accounts: Regexp.new(/example/), 
              canceled_accounts : Regexp.new(/example/),
              converted_accounts: Regexp.new(/example/)
            }
values = {}

contents = File.open("weekly_report.txt").read
regexHash.each do |var, regex|
  values[var] = contents.scan(regex).join
end
要在以后访问您的值,只需使用

values[:var_name] # values[:activated_accounts] for example

您可能不需要为变量设置单独的数组。只需将它们用作散列中的键即可。然后,您可以稍后从另一个哈希访问这些值。更好的是,如果您不再需要正则表达式,您可以用扫描的内容替换该值

regexHash = { 
              activated_accounts: Regexp.new(/example/), 
              canceled_accounts : Regexp.new(/example/),
              converted_accounts: Regexp.new(/example/)
            }
values = {}

contents = File.open("weekly_report.txt").read
regexHash.each do |var, regex|
  values[var] = contents.scan(regex).join
end
要在以后访问您的值,只需使用

values[:var_name] # values[:activated_accounts] for example

您可能不需要为变量设置单独的数组。只需将它们用作散列中的键即可。然后,您可以稍后从另一个哈希访问这些值。更好的是,如果您不再需要正则表达式,您可以用扫描的内容替换该值

regexHash = { 
              activated_accounts: Regexp.new(/example/), 
              canceled_accounts : Regexp.new(/example/),
              converted_accounts: Regexp.new(/example/)
            }
values = {}

contents = File.open("weekly_report.txt").read
regexHash.each do |var, regex|
  values[var] = contents.scan(regex).join
end
要在以后访问您的值,只需使用

values[:var_name] # values[:activated_accounts] for example

您可能不需要为变量设置单独的数组。只需将它们用作散列中的键即可。然后,您可以稍后从另一个哈希访问这些值。更好的是,如果您不再需要正则表达式,您可以用扫描的内容替换该值

regexHash = { 
              activated_accounts: Regexp.new(/example/), 
              canceled_accounts : Regexp.new(/example/),
              converted_accounts: Regexp.new(/example/)
            }
values = {}

contents = File.open("weekly_report.txt").read
regexHash.each do |var, regex|
  values[var] = contents.scan(regex).join
end
要在以后访问您的值,只需使用

values[:var_name] # values[:activated_accounts] for example

如果要在数组中使用单独的名称变量,可以使用
来\u sym

regex = { var_names[0].to_sym => Regexp.new(/example/), 
          var_names[1].to_sym => Regexp.new(/example/) } #Rocket notation!
以及:


无论如何,我更喜欢Rob Wagner的建议。

如果希望在数组中使用单独的name变量,可以使用
来表示:

regex = { var_names[0].to_sym => Regexp.new(/example/), 
          var_names[1].to_sym => Regexp.new(/example/) } #Rocket notation!
以及:


无论如何,我更喜欢Rob Wagner的建议。

如果希望在数组中使用单独的name变量,可以使用
来表示:

regex = { var_names[0].to_sym => Regexp.new(/example/), 
          var_names[1].to_sym => Regexp.new(/example/) } #Rocket notation!
以及:


无论如何,我更喜欢Rob Wagner的建议。

如果希望在数组中使用单独的name变量,可以使用
来表示:

regex = { var_names[0].to_sym => Regexp.new(/example/), 
          var_names[1].to_sym => Regexp.new(/example/) } #Rocket notation!
以及:


无论如何,我更喜欢罗布·瓦格纳的建议。

我会将
var
重命名为
account\u group
,将
values
重命名为
account\u group
,但这看起来不错。哦,我的天,这太棒了:)非常感谢!!我想将
var
重命名为类似
account\u group
的名称,将
values
重命名为
account\u group
,但这看起来不错。哦,天哪,这太棒了:)非常感谢!!我想将
var
重命名为类似
account\u group
的名称,将
values
重命名为
account\u group
,但这看起来不错。哦,天哪,这太棒了:)非常感谢!!我想将
var
重命名为类似
account\u group
的名称,将
values
重命名为
account\u group
,但这看起来不错。哦,天哪,这太棒了:)非常感谢!!