0

我正在解析一个 tsv 文件并将其加载到 MySQL 中。我让它工作,然后发现 tsv 文件中有反斜杠被解释为换行符。我想在将数据发送到数据库之前从所有字段中删除 \。这是一个简短的示例,文件中有 300 列,其中许多列是空白的。

begin              
  CSV.foreach(file, :col_sep => "\t") do |row|
      row.map!{ |e| e.gsub(/\\/, '')} 
      d = Datafeed.new
      d.id = row[0]
      d.description = row[1]
      d.save!
  end
end

当我运行这个例子时,我得到一个错误:undefined method `gsub' for nil:NilClass。我认为这个错误是由文件中的空白产生的。但是,当我尝试添加

row.map!{ |e| unless e.blank e.gsub(/\\/, '') } 

它不会执行,我得到一个意外的错误}。

这是消除反斜杠的正确方向吗?最好的方法是什么?

谢谢

4

1 回答 1

1

unless语句应遵循其他代码。这就是导致第二个错误的原因。尝试这个:

row.map!{ |e| e.gsub(/\\/, '') unless e.blank? }

注意:该代码将变成""nil所期望的,也可能不是您所期望的。

你的方法似乎很合理。

编辑:

要保留空白,您可以执行以下操作:

row.map!{ |e| e.blank? ? '' : e.gsub(/\\/, '') }

或者如果这对你来说有点太多了,这个:

row.map! do |e|
  if e.blank?
    ''
  else
    e.gsub(/\\/, '')
  end
end
于 2012-10-25T00:51:11.093 回答