读取制表符分隔文件并在Ruby中连接选择列

时间:2012-11-19 22:57:54

标签: ruby text-parsing

我有一个制表符分隔文件,其中前10列始终存在并保持在同一位置,但在第10列之后,列数可以更改。我希望保留前10列,并将其余列连接成一列|分隔。

以下是示例数据:

  

列:col1 col2 ... col 10 col11 col12 col13

     

值:1 2 ... 10 11 12 13

结果:

  

列:col1 col2 ... col10 col11 | col12 | col13

     

值:1 2 ... 10 11 | 12 | 13

2 个答案:

答案 0 :(得分:2)

你可以从像

这样的东西开始
IO.foreach('path/to/file') do |line|
  splits = line.split("\t")

  col1, col2, col3, col4, col5, col6, col7, col8, col9, col10 = splits


  col11 = splits[10..-1].join('|')
end

答案 1 :(得分:2)

看一下ruby的split方法 - 它需要一个可选的limit参数。假设您的数据位于每行的变量row中:

values = row.split("\t", 11)

示例(为简洁起见,可变部分从第3列开始):

s = "1\t2\t3\t4" 
cols = s.split("\t", 3) 
# result: ["1", "2", "3\t4"] 

然后你可以改变最后一个元素:

cols[2] = cols.last.gsub("\t", "|")
# cols is now: ["1", "2", "3|4"]