2012-06-13 154 views
0

我對ruby相當陌生。我有以下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

你可能想要類似於:

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

掃描用捕獲基團將提供多方d陣列

0

下面的行:因爲陣列的掃描返回陣列

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

返回陣列。對於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