2013-03-25 6 views
0

У меня возникла проблема с файловыми концепциями. У меня есть текстовый файл, в котором у меня 1000 строк. Я хочу разбить этот файл на 2 и каждый из них должен содержать 500 строк. Для этого я написал следующий код, но он разделяет это, предоставляя определенное пространство памяти.
Как разбить текстовый файл на 2 файла, используя количество строк?

class Hello 
    def chunker f_in, out_pref, chunksize = 500 
    File.open(f_in,"r") do |fh_in| 
    until fh_in.eof? 
     ch_path = "/my_applications//#{out_pref}_#{"%05d"%(fh_in.pos/chunksize)}.txt" 
     puts "choose path: " 
     puts ch_path 
     File.open(ch_path,"w") do |fh_out| 
     fh_out << fh_in.read(chunksize) 
     puts "FH out : " 
     puts fh_out 
     end 
    end 
    end 
    end 
end 

f=Hello.new 
f.chunker "/my_applications/hello.txt", "output_prefix" 


Я могу разделить родительский файл в зависимости от размера памяти (500кб). Но я хочу, чтобы это разделилось по количеству строк. Как я могу это достичь.
Пожалуйста, помогите мне.

ответ

4

Расчет средней линии pivot, и выход по его.

out1 = File.open('output_prefix1', 'w') 
out2 = File.open('output_prefix2', 'w') 
File.open('/my_applications/hello.txt') do |file| 
    pivot = file.lines.count/2 
    file.rewind 
    file.lines.each_with_index do |line, index| 
    if index < pivot 
     out1.write(line) 
    else 
     out2.write(line) 
    end 
    end 
end 
out1.close 
out2.close 
+0

Работа хороший, но 1 вопрос. Если общее число строк равно 1001 (нечетное число), то как это сделать? – VenkatK

+0

@VenkatK 500 в первом, 501 во втором – toch

2

file = File.readlines('hello.txt')

File.open('first_half.txt', 'w') {|new_file| new_file.puts file[0...500]} File.open('second_half.txt', 'w') {|new_file| new_file.puts file[500...1000]}

+0

Большое спасибо за ваш быстрый ответ. – VenkatK

+0

Это мое удовольствие. – slowpoke

Смежные вопросы