2012-11-15 57 views
3

的父目錄我有簡單的腳本,應該閱讀Excel和打印兩個單元:紅寶石獲得當前文件

require 'rubygems' 
gem 'ruby-ole','1.2.11.4' 
require 'spreadsheet' 

class Filter 
    # Gets zipcode range 
    def get_zipcode_range 
     wb = Spreadsheet.open "../data/zipcode_range.xls" 
     sheet = wb.worksheet 0 
     [sheet.cell(0, 0), sheet.cell(0, 1)] 
    end 
end 

f = Filter.new 
puts f.get_zipcode_range 

文件結構如下:

FilterExcel 
    data 
    zipcode_range.xls 
    lib 
    filter.rb 

當我打開命令提示符,然後去到FilterExcel \ lib和運行:

ruby filter.rb 

它提供了預期的輸出:

3911AW

3911ZZ

但是,當我從項目的根文件夾運行腳本,FilterExcel,那麼它會引發錯誤:

C:\Documents and Settings\Erik\FilterExcel>ruby lib\filter.rb C:/Ruby193/lib/ruby/gems/1.9.1/gems/spreadsheet-0.7.4/lib/spreadsheet.rb:68:in 'initialize': No such file or directory - ../data/zipcode_range.xls (Errno::ENOENT) from C:/Ruby193/lib/ruby/gems/1.9.1/gems/spreadsheet-0.7.4/lib/spreadsheet.rb:68:in 'open' from C:/Ruby193/lib/ruby/gems/1.9.1/gems/spreadsheet-0.7.4/lib/spreadsheet.rb:68:in 'open' from lib/filter.rb:56:in 'get_zipcode_range' from lib/filter.rb:63:in ''

附:如果有問題,我使用Windows XP。

回答

3

你應該使用File.expand_pathdocs

wb = Spreadsheet.open File.expand_path("../data/zipcode_range.xls", __FILE__) 

假設,該文件您發佈的謊言在同一目錄作爲data/。如果data/是在當前的Ruby文件的父目錄,上兩次:

wb = Spreadsheet.open File.expand_path("../../data/zipcode_range.xls", __FILE__) 

第一../使用File.expand_path這種方式時,一定要中和__FILE__。如果你不能確定,請生成該文件路徑的調試輸出:

puts File.expand_path("../data/zipcode_range.xls", __FILE__) 
+0

正如我寫的那樣,所謂的文件(filter.rb)不在數據目錄中,而是在lib目錄中。 '放置File.expand_path(「../ data/zipcode_range.xls」,__FILE __)',給出:'C:/ Documents and Settings/Erik/FilterExcel/lib/data/zipcode_range.xls'這是意想不到的結果。但'放入File.expand_path(「../../ data/zipcode_range.xls」,__FILE __)'會給出正確的輸出:'C:/ Documents and Settings/Erik/FilterExcel/data/zipcode_range.xls'。 –

0

你應該更改您的代碼從

wb = Spreadsheet.open "../data/zipcode_range.xls" 

wb = Spreadsheet.open "#{File.dirname(__FILE__)}/../data/zipcode_range.xls" 
+0

這再次引發錯誤:'C:/Ruby192/lib/ruby/gems/1.9.1/gems/spreadsheet-0.7 .4/lib/spreadsheet.rb:68:在'initialize'中:沒有這樣的文件或目錄 - lib /../ data/zipcode_range.xls(Errno :: E NOENT) from C:/ Ruby192/lib/ruby /gems/1.9.1/gems/spreadsheet-0.7.4/lib/spreadshe et.rb:68:在'open' from C:/Ruby192/lib/ruby/gems/1.9.1/gems/spreadsheet- 0.7.4/lib/spreadshe et.rb:68:'open' from lib/filter.rb:9:'get_zipcode_range' from lib/filter.rb:16:'

'' –