0

私はファイルの概念に関していくつかの問題に直面しています。1000行のテキストファイルがあります。そのファイルを2つに分割し、それぞれに500行を含める必要があります。そのために私は次のコードを書きましたが、それは特定のメモリスペースを与えることによってそれを分割します。

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

2 に答える 2

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
于 2013-03-25T14:14:55.313 に答える
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]}

于 2013-03-25T14:06:33.213 に答える