2

我正在尝试处理一些非常大的制表符分隔文件。过程是:

  begin
   Dir["#{@data_path}*.tsv"].each do |file|
       begin              
          CSV.foreach(file, :col_sep => "\t") do |row|

           # assign columns to model and save

           end
           @log.info("Loaded all files into MySQL database illu.datafeeds")
       rescue Exception => e
             @log.warn("Unable to process the data feed: #{file} because #{e.message}")
             next
       end
   end

但是,当我执行此操作时,出现以下错误:

Unable to process the file: /Users/XXXXX_2013-06-12.tsv because Illegal quoting in line 153.

这些文件太大,我无法进入并修复错误行。即使有错误行,我也希望该过程继续循环并处理文件。

有什么建议么?

谢谢。

4

1 回答 1

4

只是... rescue nil导致错误的行

你甚至可以用记录器记录它

在循环之前:

error_log ||= Logger.new("#{Rails.root}/log/my.log")

在循环内部而不是仅仅rescue nil使用

rescue error_log.info(row.to_s)

如果您在文件开始解析之前收到错误(在 .foreach 过程之前),您可以将其作为原始文件打开并稍后以 CSV 格式读取 - 在循环内(如此所述)

..或者只是拯救完整的文件解析过程

 CSV.foreach(file, :col_sep => "\t") do |row|
    ...
 end rescue error_log.info(row.to_s) 
于 2013-07-02T19:11:36.797 回答