0

我对红宝石还很陌生。我有以下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)

4

2 回答 2

0

你可能想要这样的东西:

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

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

于 2012-06-13T09:06:45.017 回答
0

以下行:

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

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

我猜你需要标量值macOffice,因此,你想使用 match ,它只返回非重复匹配 using 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

于 2012-06-13T09:48:07.460 回答