2009-09-21 59 views
0

問候,忽略沒有找到這樣的文件

我有一個ruby腳本,它打開文件並將文件內的數據插入數據庫。有些文件丟失,所以當腳本嘗試打開文件時,它會拋出文件未找到異常。

有誰能告訴我如何繼續這個過程,而不是整個事情突然結束。請注意,這是我用紅寶石做的第一件事情,所以要溫和! :-)

我正在使用的代碼如下

def insertData 
for i in (1..93) 
puts "now looking at #{i}" 
file = File.new("callspan/#{i}", "r") 
while(line = file.gets) 
with_db do |db| 
db.query(line) 
end 
end 
end 

回答

4

自動換行的文件通過調用File.exists?或救援從異常開放。我更喜歡前者,如果你期望它是一個普通的例子(例外是「特殊」的問題)。

def insertData 
    for i in (1..93) 
    puts "now looking at #{i}" 
    next if !File.exists?("callspan/#{1}") 
    file = File.new("callspan/#{i}", "r") 
    while(line = file.gets) 
     with_db do |db| 
     db.query(line) 
     end 
    end 
    end 
end 
2

簡單的一行異常處理:

10/0 rescue nil 

救援只是找不到文件例外:

def insert_data 
    (1..93).each do |i| 
    puts "now looking at #{i}" 
    begin 
     file = File.new("callspan/#{i}", 'r') 
     while(line = file.gets) 
     with_db do |db| 
      db.query(line) 
     end 
     end 
    rescue Errno::ENOENT 
     puts "skipping #{i}" 
    end 
    end 
end 
+0

我在哪裏堅持? – Steve 2009-09-21 15:44:57

+0

查看Leonid Shevtsov的回答。如果你只想捕獲文件找不到異常救援Errno :: ENOENT。 – yawn 2009-09-21 17:21:34

0

使用rescue nil捕獲異常,例如:

def insertData 
    for i in (1..93) 
    puts "now looking at #{i}" 
    File.open("callspan/#{i}", "r").each_line do |line| 
     with_db do |db| 
     db.query(line) 
     end 
    end rescue nil 
    end 
end 

(我也是o在循環中加上with_db,這可能更有效)