'Read the ``table`` and return the results in a format determined by
the ``outputter`` attribute.
The ``table`` parameter is any string or object that can be processed
by the instance ``inputter``.  For the base Inputter class ``table`` can be
one of:
* File name
* File-like object
* String (newline separated) with all header and data lines (must have at least 2 lines)
* List of strings
Parameters
table : str, file_like, list
Input table.
Returns
table : `~astropy.table.Table`
Output table'

def read(self, table):

    with suppress(TypeError):
        if (os.linesep not in (table + '')):
            self.data.table_name = os.path.basename(table)
    self.lines = self.inputter.get_lines(table)
    self.data.get_data_lines(self.lines)
    self.header.update_meta(self.lines, self.meta)
    self.header.get_cols(self.lines)
    self.header.check_column_names(self.names, self.strict_names, self.guessing)
    self.cols = cols = self.header.cols
    self.data.splitter.cols = cols
    n_cols = len(cols)
    for (i, str_vals) in enumerate(self.data.get_str_vals()):
        if (len(str_vals) != n_cols):
            str_vals = self.inconsistent_handler(str_vals, n_cols)
            if (str_vals is None):
                continue
            if (len(str_vals) != n_cols):
                errmsg = 'Number    of    header    columns    ({})    inconsistent    with    data    columns    ({})    at    data    line    {}\nHeader    values:    {}\nData    values:    {}'.format(n_cols, len(str_vals), i, [x.name for x in cols], str_vals)
                raise InconsistentTableError(errmsg)
        for (j, col) in enumerate(cols):
            col.str_vals.append(str_vals[j])
    self.data.masks(cols)
    if hasattr(self.header, 'table_meta'):
        self.meta['table'].update(self.header.table_meta)
    table = self.outputter(cols, self.meta)
    self.cols = self.header.cols
    _apply_include_exclude_names(table, self.names, self.include_names, self.exclude_names)
    return table
