2011-07-25 22 views
0

編程和Ruby的新手。我正在使用iStock API,需要發送一個fileID來請求關於我擁有的文件的信息。從數組中取出數字Ruby

示例文件,我有我需要得到請求對iStock信息:

["iStock_000001053628Small.jpg", "iStock_000002270952Big_Web.mov", "ist2_7034929-blurred-commuter.jpg", iStock_000000042199Medium.jpg] 

在IRB的工作,我發送到iStock的API代碼:

require 'xmlrpc' 
parameters = {:apiKey=>"#", :fileID=>"1053628"} 
server = XMLRPC::Client.new2("http://api.istockphoto.com/webservices/xmlrpc") 
server.call("istockphoto.image.getInfo", parameters) 

挑戰: 我需要從數組中提取fileID數字。這意味着我必須從文件編號的前面取出所有的零。但是,文件號碼的長度不同,每個圖像的前端零點數量也不相同。

istock.each do |x| 
    result = ' ' 
    x.scan(/\d+/) do |y| 
    if y.to_i > 4 
     result << y 
    end 
    puts result 
    end 
end 

000001053628 
000002270952 
7034929 
000000042199 

我不知道如何處理這個問題,因爲如果我設置的規則集0的,有可能是一個時間,當實際的fileid也有這些的吧。

回答

2

我不知道你要支持什麼樣的不同的文件名格式,但這樣的事情對我的作品:

$ irb 
irb(main):001:0> test_data = ["iStock_*000001053628*Small.jpg", "iStock_000002270952BigWeb.mov", "ist2_7034929-blurred-commuter.jpg", "iStock_*000000042199*Medium.jpg"] 
=> ["iStock_*000001053628*Small.jpg", "iStock_000002270952Big Web.mov", "ist2_7034929blurred-commuter.jpg", "iStock_*000000042199*Medium.jpg"] 
irb(main):002:0> test_data.map do |d| 
irb(main):003:1* d.scan(/\d{4,}/).first.gsub(/^0+/,'') 
irb(main):004:1> end 
=> ["1053628", "2270952", "7034929", "42199"] 
irb(main):005:0> 
+0

而不是gsub,在這裏一個子就足夠了。但是你也沒有一個子:'d.scan(/ [1-9] \ d {3,} /)。first',或簡單地'd.scan(/ \ d {4,} /)。 .to_i'來獲取原始數字。 –

+0

乾杯!這也適用! – iamgato

0

我不知道這條線是什麼:

if y.to_i > 4 

但它聽起來像你只是想刪除前導零,正確的?

在這種情況下,只是試試這個:

# Parse the string as an integer, then re-format as a string. 
result << y.to_i.to_s 

這將填充你的result陣列字符串,其前導零得到了有效去除。

+0

謝謝你的工作! – iamgato