Ruby获取当前文件的父目录

时间:2012-11-15 11:47:48

标签: ruby spreadsheet relative-path

我有一个简单的脚本应该读取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:在   'initialize':没有这样的文件或目录 - ../data/zipcode_range.xls   (错误:: ENOENT)           来自C:/Ruby193/lib/ruby/gems/1.9.1/gems/spreadsheet-0.7.4/lib/spreadsheet.rb:68:in   '打开'           来自C:/Ruby193/lib/ruby/gems/1.9.1/gems/spreadsheet-0.7.4/lib/spreadsheet.rb:68:in   '打开'           来自lib / filter.rb:56:'get_zipcode_range'           来自lib / filter.rb:63:在''

P.S。如果重要的话,我会使用Windows XP。

2 个答案:

答案 0 :(得分:3)

您应该使用File.expand_path docs

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__这种方式时始终会中和File.expand_path。如果您不确定,请对生成的文件路径进行调试输出:

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

答案 1 :(得分:0)

您应该从

更改代码
wb = Spreadsheet.open "../data/zipcode_range.xls"

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