Ruby: Как разбить файл на несколько файлов заданного размера

Я хочу разбить текстовый файл на несколько файлов, каждый из которых содержит не более 5 МБ. Я знаю, что для этого есть инструменты, но мне это нужно для проекта, и я хочу сделать это на Ruby. Кроме того, я предпочитаю делать это с помощью File.open в контексте блока, если это возможно, но я с треском провалился: o (

#!/usr/bin/env ruby

require 'pp'

MAX_BYTES = 5_000_000

file_num = 0
bytes    = 0

File.open("test.txt", 'r') do |data_in|
  File.open("#{file_num}.txt", 'w') do |data_out|
    data_in.each_line do |line|
      data_out.puts line

      bytes += line.length

      if bytes > MAX_BYTES
        bytes = 0
        file_num += 1
        # next file
      end
    end
  end
end

Эта работа, но я не думаю, что она элегантна. Кроме того, мне все еще интересно, можно ли это с File.open только в контексте блока.

#!/usr/bin/env ruby

require 'pp'

MAX_BYTES = 5_000_000

file_num = 0
bytes    = 0

File.open("test.txt", 'r') do |data_in|
  data_out = File.open("#{file_num}.txt", 'w')

  data_in.each_line do |line|
    data_out = File.open("#{file_num}.txt", 'w') unless data_out.respond_to? :write
    data_out.puts line

    bytes += line.length

    if bytes > MAX_BYTES
      bytes = 0
      file_num += 1
      data_out.close
    end
  end

  data_out.close if data_out.respond_to? :close
end

Ура,

Мартин

7
задан maasha 9 April 2013 в 08:08
поделиться