読者です 読者をやめる 読者になる 読者になる

ネット偽善者でもいいじゃない

悩んでるなら面白いマンガ読もう

2つのファイルを1つのファイルにまとめる時、ソートしてまとめる方法 in Ruby

Ruby プログラミング

2つのテキストファイルを、日付などでソートしながらまとめていく方法

Rubyを用いて、2つのファイルをソートした状態で1つのファイルにまとめる方法

例えば

textfile_1.txt

2015/09/07 15:12:07 ああああああ

2015/09/07 15:12:10 ああああああ

2015/09/07 15:12:19 ああああああ

textfile_2.txt

2015/09/07 15:12:08 いいいいいい

2015/09/07 15:12:09 いいいいいい

2015/09/07 15:12:24 いいいいいい

という2つのファイルがあって、ひとつのテキストファイル(textfile_3.txt)にまとめたい時

時刻の古いほうから順番に並べ替えてまとめたい時の方法

汚いコードだけど一応できた

なんとなく変数もたくさん増やしてますが、適宜削除してかまいません (array_fileとかいちいち作らなくてもいけるので)

# encoding:utf-8
require 'time'

File.open('textfile_3.txt', "w") do |file|
    File.open('textfile_1.txt') do |f|
        File.open('textfile_2.txt') do |g|

            array1 = []
            array2 = []

            f.each do |i|
                array1.push(i)      # textfile_1の内容を配列array1に格納
            end

            g.each do |i|
                array2.push(i)      # textfile_2の内容を配列array2に格納
            end

            array_mix = array1.concat(array2)   # array1とarray2を合わせた配列(array)を生成

            array_file = array_mix.sort {|a, b| Time.parse(a) <=> Time.parse(b)}              # array_mixを、Timeクラスを用いてソートして、新しくarray_file配列とする

            array_fileの内容を、textfile_3.txtに書き込む
            array_file.each do |i|
                file.puts(i)
            end
            
        end
    end
end

以上で、下記のtextfile_3.txtが生成されるはずです

textfile_3.txt

2015/09/07 15:12:07 ああああああ

2015/09/07 15:12:08 いいいいいい

2015/09/07 15:12:09 いいいいいい

2015/09/07 15:12:10 ああああああ

2015/09/07 15:12:19 ああああああ

2015/09/07 15:12:24 いいいいいい

arrayのソートの方法は

http://ref.xaio.jp/ruby/classes/array/sort

と Timeクラス

http://docs.ruby-lang.org/ja/2.2.0/method/Time/s/parse.html

を参照してください

Time.parseした配列は、単純に比較できます

参考 http://www.namaraii.com/rubytips/?%E6%97%A5%E4%BB%98%E3%81%A8%E6%99%82%E5%88%BB#l6