LoginSignup
11
2

More than 3 years have passed since last update.

Rubyで複数のファイルを結合させる

Last updated at Posted at 2018-02-27

こんにちは、普段は、Ruby でサーバーサイドのバッチ処理を担当している一年目のエンジニアです。
仕事をしていると、ヘッダーが同じ複数のファイルをまとめたいことってたまにあるんですが、(レポートファイルをまとめたり、load_data_infile 用に)その時の書き方をかんがえてみました。
バイナリベースで読み込みを行うので、基本的には、どんな文字コードのファイルでも大丈夫(なはず)です。
僕はCSV や TSV をまとめる処理を行う際にこのメソッドを使っています。
注意点: ヘッダに改行コードが含まれている場合(そんな邪悪なファイルは触りたくない。。。)、このメソッドはうまく働かないです。
加えて、第一引数の file_paths に対して本来は、nil チェックやら加えたほうがいいですね。

# @param [Array<String>] file_paths 配列でファイルパスを渡します.
# @param [Stiring] to_path 書き出す先のファイルパスを指定します.
def merge_files(file_paths, to_path)
  FileUtils.rm(to_path, force: true)
  file_paths.each_with_index do |file_path, file_i|
    open(file_path, 'rb').each_line.with_index do |row, row_i|
      next if file_i.nonzero? && row_i.zero?
      open(to_path, 'a') { |f| f << row }
    end
  end
end

参考 公式ドキュメント module function Kernel.#open

11
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
2