code: def create_joiners(j, c, p)
          js = j.split(';').collect { |j| j.split('=').collect { |j| j.to_i } }
          cs = c.split(';').collect { |c| c.split(',').collect { |c| c.to_i } }
          ps = col_positions(p, cs)
  
          @joiners = []
          (0...js.size).each do |i| 
            @joiners << Joiner.new(js[i], ps[i], cs[i], { rows: { } }) 
          end 
  
          ps.flatten
        end
docs: Initializes joiners based on joins, positions and columns
  
   Possible input forms are:
   joins:: "4=0;4=1" or "4=1"
   positions:: "1,2;4,5" or "1,2"
   columns:: "1,2;3,4"
  
   This has the semantic of 'insert columns 1 and 2 at positions 1 and 2
   for key 0 and columns 3 and 4 at positions 4 and 5 for key 1. Key 4 is
   the corresponding value in the source file
  
   Return value:: positions where to insert values from source file