将ruby数组转换为字符串

时间:2012-06-13 08:44:05

标签: ruby arrays

我对红宝石很新。我有以下csv:

Office (1), Test 
Office (Test)(2), Test

在“data.csv”中。

然后在我的红宝石剧本中,我有;

CSV.foreach("data.csv") do |line|
  registeredOffice = line[0].to_s() 
  macOffice = registeredOffice.scan(/\(([^\)]+)\)/).last


  csvText = "#{csvText}\n#{macOffice}"
end

哪个给了我

["1"]
["2"]

但是我想知道如何将上面的内容转换为字符串,因此输出为

1
2

使用.join[0]会返回nil:NilClass (NoMethodError)

2 个答案:

答案 0 :(得分:0)

您可能需要以下内容:

macOffice = registeredOffice[/(\d+)\)$/, 1]

使用捕获组扫描将为您提供多维数组

答案 1 :(得分:0)

以下一行:

macOffice = registeredOffice.scan(/\(([^\)]+)\)/).last

返回数组,因为scan返回数组的数组。对于data.csv的第一行,它是["1"]

我猜你需要macOffice的标量值,因此,你想使用仅使用match返回非重复匹配的匹配,它会返回一次匹配数组。例如,您可以使用[1]下标从返回的数组中获取第一个匹配项,因此:

macOffice = registeredOffice.match(/\(([^\)]+)\)/)[1]

返回1

假设你想要一个数组,你可以像这样写:

out = []
CSV.foreach("data.csv") do |line|
  registeredOffice = line[0].to_s() 
  macOffice = registeredOffice.match(/\((\d+)\)/)[1]
  out.push(macOffice)
end

puts out.join(",")

生成1,2