Я хочу разбить текстовый файл на несколько файлов, каждый из которых содержит не более 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
Ура,
Мартин