将TSV文件中的数字放入数组中

时间:2014-09-26 18:46:53

标签: ruby tsv

我有一个TSV文件,里面有一列。在那一列是一堆数字。该列有一个标题。

将该列中的所有数字合并为一个数组的最有效方法是什么? (比如2,000,000个数字)。

示例数据:

income
2000\n
80000\n
50000\n
30000\n

我试过了:

File.readlines(path)[1..-1].collect{|salary| salary.gsub("\n",'')}

我希望得到以下输出:

[2000,80000,50000,30000]

我有什么工作,但我不确定它是最有效的,因为我会在内存中读取一百万行。

2 个答案:

答案 0 :(得分:1)

您可以使用CSV执行此操作,因为您只有一列,所以非常简单。

require 'csv'
CSV.read("/path/to/file.tsv").flatten

答案 1 :(得分:0)

您可以执行以下操作:

array = []
File.foreach('test.txt') do |line|
  next if $. == 1
  line.chomp!
  array << line if line > ''
end

p array

array作为:

返回
["2000", "80000", "50000", "30000"]

然而,这不是一个可扩展的解决方案。根据您的计算机,您可能会耗尽内存并使应用程序爬行。相反,我强烈建议使用一个简单的数据库来存储值,然后对其进行操作。数据库是为此类目的而设计的,速度极快。我建议使用Sequel gem。

$.是一个特殊变量,用于跟踪上次读取文件的行号,因此,当foreach将行传递到块中时,$.将递增。这使得跳过特定的线条很容易。

  array << line if line > ''

用于避免在输入文件包含尾随/终止行结束时附加空行/空行。