'Create a table from the input ASCII files.  The input is from up to
three separate files, one containing column definitions, one containing
header parameters, and one containing column data.
The column definition and header parameters files are not required.
When absent the column definitions and/or header parameters are taken
from the header object given in the header argument; otherwise sensible
defaults are inferred (though this mode is not recommended).
Parameters
datafile : file path, file object or file-like object
Input data file containing the table data in ASCII format.
cdfile : file path, file object, file-like object, optional
Input column definition file containing the names,
formats, display formats, physical units, multidimensional
array dimensions, undefined values, scale factors, and
offsets associated with the columns in the table.  If
`None`, the column definitions are taken from the current
values in this object.
hfile : file path, file object, file-like object, optional
Input parameter definition file containing the header
parameter definitions to be associated with the table.  If
`None`, the header parameter definitions are taken from
the current values in this objects header.
replace : bool
When `True`, indicates that the entire header should be
replaced with the contents of the ASCII file instead of
just updating the current header.
header : Header object
When the cdfile and hfile are missing, use this Header object in
the creation of the new table and HDU.  Otherwise this Header
supercedes the keywords from hfile, which is only used to update
values not present in this Header, unless ``replace=True`` in which
this Header\'s values are completely replaced with the values from
hfile.
Notes
The primary use for the `load` method is to allow the input of ASCII
data that was edited in a standard text editor of the table data and
parameters.  The `dump` method can be used to create the initial ASCII
files.'

def load(cls, datafile, cdfile=None, hfile=None, replace=False, header=None):

    if (header is None):
        header = Header()
    if hfile:
        if replace:
            header = Header.fromtextfile(hfile)
        else:
            header.extend(Header.fromtextfile(hfile), update=True, update_first=True)
    coldefs = None
    if cdfile:
        coldefs = cls._load_coldefs(cdfile)
    data = cls._load_data(datafile, coldefs)
    if (coldefs is None):
        coldefs = ColDefs(data)
    hdu = cls(data=data, header=header)
    hdu.columns = coldefs
    return hdu
