def solargen_sum(fnamein, fnameout):
    sumL = solargen_extract(fnamein)
    #sumL.sort(key=lambda x: (x[0], -x[3]))
    solargen_write(sumL, fnameout)

def solargen_extract(fname):
    lsol = []
    with open(fname, 'r') as f:
        for lin in f:
            on, tsum = lin_extract(lin)
            if on:
                lsol.append(tsum)
    return lsol

def lin_extract(lin):
    llin = lin.strip().split(';')
    if llin[2] == 'on':
        summ = 0.0
        cont = 0
        for mea in llin[3:]:
            if mea != '*':
                summ += float(mea)
                cont += 1
        return True, (llin[0], llin[1], cont, summ)
    else:
        return False, []
    
def solargen_write(l, fname):
    with open(fname, 'w') as f:
        for g, loc, sumea, nmea in l:
            llin = [g, loc, str(sumea), str(nmea)]
            f.write(';'.join(llin) + '\n')


# --------------------------------------------------------------

def solargen_sum_ordered(fnamein, fnameout):
    sumL = solargen_extract(fnamein)
    sumL.sort(key=lambda x: (x[0], -x[3]))
    solargen_write(sumL, fnameout)
