def read_lines lines, options = {}
      table_apply = TableApply.new(options)

      header = table_apply.parse_header(lines[0], options)
      Validator::valid_header?(header, @header)  # compare against older header when merging
      column_index,header = table_apply.column_index(header) # we may rewrite the header
      @header = header if not @header
 
      newheader = @header[1..-1]
      # parse the rest
      prev_line = newheader
      (lines[1..-1]).each_with_index do | line, line_num |
        rowname, data_fields = table_apply.parse_row(line_num, line, newheader, column_index, prev_line, options)
        if data_fields
          @rownames << rowname if not options[:with_rownames] # otherwise doubles rownames
          @rows << data_fields if data_fields
        end
        prev_line = data_fields
      end
      return @rownames,@rows
    end
def read_lines lines, options = {}
      table_apply = TableApply.new(options)

      header = table_apply.parse_header(lines[0], options)
      Validator::valid_header?(header, @header)  # compare against older header when merging
      column_index,header = table_apply.column_index(header) # we may rewrite the header
      @header = header if not @header
 
      newheader = @header[1..-1]
      # parse the rest
      prev_line = newheader
      (lines[1..-1]).each_with_index do | line, line_num |
        rowname, data_fields = table_apply.parse_row(line_num, line, newheader, column_index, prev_line, options)
        if data_fields
          @rownames << rowname if not options[:with_rownames] # otherwise doubles rownames
          @rows << data_fields if data_fields
        end
        prev_line = data_fields
      end
      return @rownames,@rows
    end
Read lines (list/array of string) and add them to the table, setting row
 names and row fields. The first row is assumed to be the header and
 ignored if the header has been set (the case with merge/concat tables).