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

テキストファイル内のすべてのものに対してこれを行います。誰にもアイデアはありますか?10行くらいなら手動でもいいのですが、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 に答える