使用Ruby将DOC转换为TXT:错误后恢复循环

时间:2012-11-10 00:37:27

标签: ruby

我有这个Ruby脚本将我的Word文档转换为.txt格式。 它工作正常,可以互相转换多个文件,但现在有一个错误。 如何让脚本继续下一个文件,跳过发出错误的文件?请不要使用其他技术的建议,我很满意这个。

require 'win32ole'

wdFormatDOSText = 4

word = WIN32OLE.new('Word.Application')
word.visible = false

begin
  ARGV.each do|file|
    myFile = word.documents.open(file)
    new_file = file.rpartition('.').first + ".txt"
    word.ActiveDocument.SaveAs new_file, wdFormatDOSText
    puts new_file
    word.activedocument.close(false) # no save dialog, just close it
  end
rescue WIN32OLERuntimeError => e
  puts e.message
  puts e.backtrace.inspect
  sleep 30
ensure
  word.quit
end
sleep 3

1 个答案:

答案 0 :(得分:1)

在迭代集合时,您可以在每次迭代开始时启动一个新的begin...rescue...end块,并在救援块中调用next

[ "puts 'hello'", "raise '!'" , "puts 'world'" ].each do |str|
  begin
    eval str
  rescue
    puts "caught an error, moving on"
    next
  end
end

# => hello
# => caught an error, moving on
# => world

所以在你的情况下它看起来像这样:

ARGV.each do |file|
  begin
    # ...
  rescue WIN32OLERuntimeError => e
    puts e.message
    next
  end
end