日常

ケ・セラ・セラ

ruby 2つのファイルを一行ずつ交互にマージしたい

ひとつめのファイル samplefile1

1
2
3
4
5
6
7
8
9

ふたつめのファイル samplefile2

one
two
three
four
five
six
seven
eight
nine
ten
eleven

とあった時に、こんな結果がほしい。という時。

1
one
2
two
3
three
4
four
5
five
6
six
7
seven
8
eight
9
nine
ten
eleven

こうしました。

今回は samplefile1.size < samplefile2.size な時に、samplefile2 の文字列だけ後ろに出力しておきたかったので、a2.zip(a1).map(&:reverse).flatten.compact のようにしました。

f1, f2 = %w(samplefile1 samplefile2)
a1 = File.readlines(f1)
a2 = File.readlines(f2)

a = if a1.size < a2.size
  a2.zip(a1).map(&:reverse).flatten.compact
else
  a1.zip(a2).flatten
end

File.open("outfile", "w") do |f|
  a.each {|s| f.write(s) }
end

もっと良いなにかがあれば知りたい。