将制表符分隔文件中的选择性列连接到键值对中

时间:2012-11-20 00:46:05

标签: ruby tab-delimited

我有一个制表符分隔文件,我需要将选择列连接成一个键值对。假设我的前三列保持不变,但在那之后,我可以期待任意数量的列。第三个之后的所有列都应该连接成一个键值对。

这是我的数据集:

  

col1 col2 col3 col4 col5

     

1 2 3 4 5

结果

  

col1 col2 col3 col4 | col5

     

1 2 3 col4 => 4 | col5 => 5

1 个答案:

答案 0 :(得分:1)

如果您有以下输入文件:

col1,col2,col3,col4,col5
1,2,3,this,that
2,3,4,some,more
3,4,5,a,b

然后拉出标题,拆分和解构每一行可以通过以下方式完成:

header, *lines = File.readlines('var.txt')
header = header.split(',')
header[-1].chomp!
rest_fields = header.slice(3..-1)
recs = lines.map do |line|
  line.chomp!
  f1, f2, f3, *rest = line.split(',')
  pairs = {}
  rest_fields.each do |f|
    pairs[f] = rest.shift
  end
  [f1, f2, f3, pairs]
end


recs.each do |rec|
  puts rec.inspect
end

运行它给出:

["1", "2", "3", {"col4"=>"this", "col5"=>"that"}]
["2", "3", "4", {"col4"=>"some", "col5"=>"more"}]
["3", "4", "5", {"col4"=>"a", "col5"=>"b"}]

这就是你要追求的吗?