2013-03-25 38 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" 


我能够根据内存大小(500KB)的父文件分割。 但我希望被行数分割。我怎样才能做到这一点。
请帮帮我。

回答

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 2013-03-25 14:25:35

+0

@VenkatK 500首,501第二 – toch 2013-03-25 14:33:24

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 2013-03-25 14:26:35

+0

这是我的荣幸。 – slowpoke 2013-03-25 14:31:25

相关问题