lib/sycsvpro/merger.rb
def execute
      File.open(outfile, 'w') do |out|
        out.puts "#{';' unless @key.empty?}#{header_cols.join(';')}"
        files.each do |file|
          @current_key = create_current_key
          @current_source_header = @source_header.shift
          processed_header = false
          File.open(file).each_with_index do |line, index|
            next if line.chomp.empty?

            unless processed_header
              create_file_header unstring(line).split(';')
              processed_header = true
              next
            end

            out.puts create_line unstring(line).split(';')
          end
        end
      end
    end
def execute
      File.open(outfile, 'w') do |out|
        out.puts "#{';' unless @key.empty?}#{header_cols.join(';')}"
        files.each do |file|
          @current_key = create_current_key
          @current_source_header = @source_header.shift
          processed_header = false
          File.open(file).each_with_index do |line, index|
            next if line.chomp.empty?

            unless processed_header
              create_file_header unstring(line).split(';')
              processed_header = true
              next
            end

            out.puts create_line unstring(line).split(';')
          end
        end
      end
    end
Merge files based on common header columns

 :call-seq:
   Sycsvpro::Merger.new(outfile:       "out.csv",
                        files:         "file1.csv,file2.csv,filen.csv",
                        header:        "2010,2011,2012,2013,2014",
                        source_header: "(\\d{4}/),(/\\d{4}/)",
                        key:           "0,0").execute

 Semantics
 =========
 Merges the files file1.csv, file2.csv ... based on the header columns
 2010, 2011, 2012, 2013 and 2014 where columns are identified by the
 regex /(\d{4})/. The first column in a row is column 0 of the file1.csv
 and so on.

 outfile:: result is written to the outfile
 files:: list of files that get merged. In the result file the files are
 inserted in the sequence they are provided
 header:: header of the result file and key for assigning column values
 from source files to result file
 source_header:: pattern for each header of the source file to determine
 the column. The pattern is a regex without the enclosing slashes '/'
 key:: first column value from the source file that is used as first
 column in the target file. The key is optional.
 Merges the files based on the provided parameters