使用Ruby解析文本文件时如何跳过某些列?

Asked
Viewd254

2

我必须使用Ruby解析制表符分隔的文本文件,以从中提取一些数据。由于某些未知的原因,一些柱子没有被使用,实际上只是间隔物。我想忽略这些列,因为我不需要它们的输出(但是,由于某些合法列具有空值,所以我不能只忽略所有空列)。我已经知道这些列的索引(例如第6、14、24和38列)。

虽然我可以在解析文件时添加一个条件,然后说要解析它,除非它是其中的一列,但这似乎不是“ Rubyish”-是否有更好和更优雅的方式来处理这个问题? RegExps,也许?我曾想过做类似[6, 14, 24, 38].each { |x| columns.delete_at(x) }的操作来删除未使用的列,但这将迫使我重新确定我实际需要的列的索引。我真正想做的就是遍历整个过程,检查当前列的索引,如果它是“坏”列之一则忽略它。但是,像unless x == 6 || x == 14 || x == 24 || x == 38这样的代码看起来非常丑陋

254

1 个答案

7

不需要像这样的大规模条件。

 bad_cols = [6, 14, 24, 38]
columns.each_with_index do |val,idx|
  next if bad_cols.include? idx
  #process the data
end
 
  • I think what I should probably do instead of pulling the data from the file itself would be to just open it and delete the rows I don’t need; I plan on loading it into a database anyways but don’t want to manually remove the unused rows every time I need to load it.

    Wayne MolinaFebruary 03, 2009 21:34
  • Cool, I had read about each_index, didn’t know there was each_with_index as well. Thanks!!

    Wayne MolinaFebruary 03, 2009 20:00