0

我有一个大约 11000 行的文件。它是这样构建的:

some info 1
some cool info 1
some other info 1
foo bar 1


some info 2
some cool info 2
some other info 2
foo bar 2

我想设置一个循环来完成这个,并且喜欢:

data1 = line1
data2 = line2
data3 = line3
data4 = line4
# do stuff with the data 1,2,3,4
data1 = line7
data2 = line8
data3 = line9
data4 = line10
# do stuff with the data 1,2,3,4

并对文本文件中的所有内容执行此操作。有人有什么想法吗?手动执行十行很好,但是当它大约 11000 行时,我宁愿让它自动完成。

4

3 回答 3

0

在您的对象上使用each_slice将完美地完成这项工作。File虽然这并没有考虑空行,但是在另一个答案中有一个很好的技巧来处理它

于 2013-03-03T17:06:56.877 回答
0
File.open('/tmp/lines', 'r').each_slice(6) do |group|
  # remove newlines
  group.map! {|item| item.chomp }

  data1, data2, data3, data4 = group

  # do something with the variables...
end
于 2013-03-03T17:09:32.457 回答
0
input = <<-EOF
some info 1
some cool info 1
some other info 1
foo bar 1



some info 2
some cool info 2
some other info 2
foo bar 2
EOF

input.lines.reject(&:empty?).each_slice(4) do |data|
  puts data[0]
  puts data[1]
  puts data[2]
  puts data[3]
  puts '-----'
end

输出:

some info 1
some cool info 1
some other info 1
foo bar 1
-----
some info 2
some cool info 2
some other info 2
foo bar 2
-----
于 2013-03-03T17:12:08.467 回答