@staticmethod
def _analyseOneLoop(lFields, iStart):
    """Processes one loop in the data extraction of the CIF file
        @param lFields: list of all the words contained in the cif file
        @type lFields: list
        @param iStart: the starting index corresponding to the "loop_" key
        @type iStart: integer
        @return: the list of loop dictionaries, the length of the data extracted from the lFields and the list of all the keys of the loop.
        @rtype: tuple
        """
    loop = []
    keys = []
    i = iStart + 1
    bFinished = False
    while not bFinished:
        if lFields[i][0] == '_':
            keys.append(lFields[i])
            i += 1
        else:
            bFinished = True
    data = []
    while True:
        if i >= len(lFields):
            break
        elif len(lFields[i]) == 0:
            break
        elif lFields[i][0] == '_':
            break
        elif lFields[i] in ['loop_', 'stop_', 'global_', 'data_', 'save_']:
            break
        else:
            data.append(lFields[i])
            i += 1
    k = 0
    if len(data) < len(keys):
        element = {}
        for j in keys:
            if k < len(data):
                element[j] = data[k]
            else:
                element[j] = '?'
            k += 1
        loop.append(element)
    else:
        for i in range(len(data) / len(keys)):
            element = {}
            for j in keys:
                element[j] = data[k]
                k += 1
            loop.append(element)
    return loop, 1 + len(keys) + len(data), keys
