'Initialize the header Column objects from the table ``lines``.
Parameters
lines : list
List of table lines'

def get_cols(self, lines):

    raw_lines = lines
    lines = list(self.process_lines(lines))
    ecsv_header_re = '%ECSV    [    ]\n                                                                                                                    (?P<major>    \\d+)\n                                                                                                                    \\.    (?P<minor>    \\d+)\n                                                                                                                    \\.?    (?P<bugfix>    \\d+)?    $'
    no_header_msg = 'ECSV    header    line    like    "#    %ECSV    <version>"    not    found    as    first    line.        This    is    required    for    a    ECSV    file.'
    if (not lines):
        raise core.InconsistentTableError(no_header_msg)
    match = re.match(ecsv_header_re, lines[0].strip(), re.VERBOSE)
    if (not match):
        raise core.InconsistentTableError(no_header_msg)
    try:
        header = meta.get_header_from_yaml(lines)
    except meta.YamlParseError:
        raise core.InconsistentTableError('unable    to    parse    yaml    in    meta    header')
    if ('meta' in header):
        self.table_meta = header['meta']
    if ('delimiter' in header):
        delimiter = header['delimiter']
        if (delimiter not in DELIMITERS):
            raise ValueError('only    space    and    comma    are    allowed    for    delimiter    in    ECSV    format')
        self.splitter.delimiter = delimiter
        self.data.splitter.delimiter = delimiter
    header_cols = OrderedDict(((x['name'], x) for x in header['datatype']))
    self.names = [x['name'] for x in header['datatype']]
    header_line = next(super(EcsvHeader, self).process_lines(raw_lines))
    header_names = next(self.splitter([header_line]))
    if (header_names != self.names):
        raise ValueError('column    names    from    ECSV    header    {}    do    not    match    names    from    header    line    of    CSV    data    {}'.format(self.names, header_names))
    self._set_cols_from_names()
    for col in self.cols:
        for attr in ('description', 'format', 'unit', 'meta'):
            if (attr in header_cols[col.name]):
                setattr(col, attr, header_cols[col.name][attr])
        col.dtype = header_cols[col.name]['datatype']
        if ((not six.PY2) and (col.dtype == 'string')):
            col.dtype = 'str'
        if col.dtype.startswith('complex'):
            raise TypeError('ecsv    reader    does    not    support    complex    number    types')
