我对红宝石很新。我有以下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)
答案 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