def rows_from_params(opts)
        col_count = opts[:cols] 
        row_count = opts[:rows]
        
        size = row_count * col_count if row_count && col_count

        rows = []

        if values = opts[:values] 
          if size
            values += [NotAvailable] * (size - values.size)
          elsif col_count
            values += [NotAvailable] * ((col_count - values.size) % col_count)
          elsif row_count
            values += [NotAvailable] * ((row_count - values.size) % row_count)
            col_count = values.size / row_count
          else
            col_count = Math.sqrt(values.size).ceil
            values += [NotAvailable] * ((col_count - values.size) % col_count)
          end
          values.each_slice(col_count) { |row| rows << row }
        elsif opts[:file]
          File.foreach(opts[:file]) do |line| 
            next if line.chomp.empty?
            values = line.split(SEMICOLON) rescue str2utf8(line).split(SEMICOLON)
            rows << values.collect { |v| 
              v.strip.empty? ? NotAvailable : str2num(v.chomp, opts[:ds])
            }
          end
        end

        rows
      end
def rows_from_params(opts)
        col_count = opts[:cols] 
        row_count = opts[:rows]
        
        size = row_count * col_count if row_count && col_count

        rows = []

        if values = opts[:values] 
          if size
            values += [NotAvailable] * (size - values.size)
          elsif col_count
            values += [NotAvailable] * ((col_count - values.size) % col_count)
          elsif row_count
            values += [NotAvailable] * ((row_count - values.size) % row_count)
            col_count = values.size / row_count
          else
            col_count = Math.sqrt(values.size).ceil
            values += [NotAvailable] * ((col_count - values.size) % col_count)
          end
          values.each_slice(col_count) { |row| rows << row }
        elsif opts[:file]
          File.foreach(opts[:file]) do |line| 
            next if line.chomp.empty?
            values = line.split(SEMICOLON) rescue str2utf8(line).split(SEMICOLON)
            rows << values.collect { |v| 
              v.strip.empty? ? NotAvailable : str2num(v.chomp, opts[:ds])
            }
          end
        end

        rows
      end
def rows_from_params ( opts ) col_count = opts [ :cols ] row_count = opts [ :rows ] size = row_count * col_count if row_count && col_count rows = [ ] if values = opts [ :values ] if size values += [ NotAvailable ] * ( size - values . size ) elsif col_count values += [ NotAvailable ] * ( ( col_count - values . size ) % col_count ) elsif row_count values += [ NotAvailable ] * ( ( row_count - values . size ) % row_count ) col_count = values . size / row_count else col_count = Math . sqrt ( values . size ) . ceil values += [ NotAvailable ] * ( ( col_count - values . size ) % col_count ) end values . each_slice ( col_count ) { | row | rows << row } elsif opts [ :file ] File . foreach ( opts [ :file ] ) do | line | next if line . chomp . empty? values = line . split ( SEMICOLON ) rescue str2utf8 ( line ) . split ( SEMICOLON ) rows << values . collect { | v | v . strip . empty? ? NotAvailable : str2num ( v . chomp , opts [ :ds ] ) } end end rows end
Creates rows from provided array or file. If array doesn't provide
 equal column sizes the array is extended with NotAvailable values
Creates rows from provided array or file . If array doesn t provide equal column sizes the array is extended with NotAvailable values