def parseSmallPlant(content): filename = 'smallplant.csv' header = [ 'plantName', 'subsystem', 'stageIndex', 'genPat1', 'genPat2', 'genPat3', 'gravityCenterLoss', ] result = [] lines = content.splitlines()[1:] for line in lines: if '&' in line or line.strip() == '': continue if 'PQ' in line: patInfo = [] for i in range(3): patInfo.append( tryGetFromString(line, 24 + i * 5, 29 + i * 5, float)) result.append([ tryGetFromString(line, 4, 14), tryGetFromString(line, 14, 16, int), tryGetFromString(line, 19, 21, int), *patInfo, tryGetFromString(line, 39, 44, float), ]) return [(filename, header, result)]
def parseSystemLoad(content): filename = 'load.csv' header = [ 'stageIndex', 'subsystem', 'loadPat1', 'durationPat1', 'loadPat2', 'durationPat2', 'loadPat3', 'durationPat3', 'loadPat4', 'durationPat4', 'loadPat5', 'durationPat5' ] result = [] lines = content.splitlines()[1:] for line in lines: if '&' in line or line.strip() == '': continue if 'DP' in line: patInfo = [] for i in range(5): patInfo.append( tryGetFromString(line, 19 + i * 20, 29 + i * 20, float)) patInfo.append( tryGetFromString(line, 29 + i * 20, 39 + i * 20, float)) result.append([ tryGetFromString(line, 4, 6, int), tryGetFromString(line, 9, 11, int), *patInfo ]) return [(filename, header, result)]
def parseDisponibilityFactor(content): filename = 'dispfactor.csv' header = [ 'hydroId', 'dispFactorStage1', 'dispFactorStage2', 'dispFactorStage3', 'dispFactorStage4', 'dispFactorStage5', 'dispFactorStage6', 'dispFactorStage7', 'dispFactorStage8' ] result = [] lines = content.splitlines()[1:] for line in lines: if '&' in line or line.strip() == '': continue if 'FD' in line: patInfo = [] stageId = 0 lastInfo = 0 while lastInfo != -1: lastInfo = tryGetFromString(line, 9 + stageId * 5, 14 + stageId * 5, float) if stageId == 8: break patInfo.append(lastInfo) stageId = stageId + 1 result.append([tryGetFromString(line, 4, 7, int), *patInfo]) return [(filename, header, result)]
def parseFloodVolume(content): filename = 'floodvol.csv' header = [ 'hydroId', 'floodVolumeStage1', 'floodVolumeStage2', 'floodVolumeStage3', 'floodVolumeStage4', 'floodVolumeStage5', 'floodVolumeStage6', 'floodVolumeStage7', 'floodVolumeStage8', 'floodVolumeStage9' ] result = [] lines = content.splitlines()[1:] for line in lines: if '&' in line or line.strip() == '': continue if 'VE' in line[:3]: patInfo = [] stageId = 0 lastInfo = 0 while lastInfo != -1: lastInfo = tryGetFromString(line, 9 + stageId * 5, 14 + stageId * 5, float) if stageId == 9: break patInfo.append(lastInfo) stageId = stageId + 1 result.append([tryGetFromString(line, 4, 7, int), *patInfo]) return [(filename, header, result)]
def parseReservoirVolume(content): filename = 'reservoir.csv' header = [ 'hydroId', 'ree', 'initialVolume', 'minOutflow', 'hasEvaporation', 'opStart', 'initialBaseVolume', 'superiorPouringLimit', 'hydroBalanceEachStage' ] result = [] lines = content.splitlines()[1:] for line in lines: if '&' in line or line.strip() == '': continue if 'UH' in line: result.append([ tryGetFromString(line, 4, 7, int), tryGetFromString(line, 9, 11, int), tryGetFromString(line, 14, 24, float, 0.0), tryGetFromString(line, 24, 34, float), tryGetFromString(line, 39, 40, int, 0), tryGetFromString(line, 44, 46, int, 1), tryGetFromString(line, 49, 59, float, 0.0), tryGetFromString(line, 59, 69, float, 1e21), tryGetFromString(line, 69, 70, int, 0) ]) return [(filename, header, result)]
def parseItaipuRest(content): filename = 'itaipuRest.csv' header = [ 'stage', 'INDICIDEUSINA', 'subsystem', 'generationItaPat1', 'loadAndePat1', 'generationItaPat2', 'loadAndePat2', 'generationItaPat3', 'loadAndePat3' ] result = [] lines = content.splitlines()[1:] for line in lines: if '&' in line or line.strip() == '': continue if 'IT' in line: result.append([ tryGetFromString(line, 4, 6, int), tryGetFromString(line, 9, 12, int), tryGetFromString(line, 14, 16, int), tryGetFromString(line, 19, 24, float), tryGetFromString(line, 25, 29, float), tryGetFromString(line, 30, 34, float), tryGetFromString(line, 35, 39, float), tryGetFromString(line, 40, 44, float), tryGetFromString(line, 45, 49, float) ]) return [(filename, header, result)]
def storedEnergyREE(content): header = [ 'REE', 'number', 'sis', 'inic', 'sem_01', 'sem_02', 'sem_03', 'sem_04', 'sem_05', 'deck_date' ] result = [] lines = content.splitlines()[1:] validy = False count = 0 date = datetime.datetime.strptime(lines[3][98:109], "%d/%m/%Y").strftime("%Y-%m-%d") for line in lines: if 'ENERGIA ARMAZENADA NOS REEs' in line: validy = True if validy == True: if 'X-' in line: count = count + 1 else: if count == 2: inic = line[28:35].strip() sem1 = line[36:42].strip() sem2 = line[43:49].strip() sem3 = line[50:56].strip() sem4 = line[57:63].strip() sem5 = line[64:70].strip() result.append([ tryGetFromString(line, 4, 17), tryGetFromString(line, 18, 22, int), tryGetFromString(line, 23, 27, int), tryGetFromString(line, 28, 35), sem1, sem2, sem3, sem4, sem5, date ]) elif count == 3: break newResult = [] newResult2 = [] for data in result: newResult.append([x if x != '' else None for x in data]) for data in newResult: newResult2.append([x if x != '-' else None for x in data]) if len(newResult2) == 0: newResult2 = [[ None, None, None, None, None, None, None, None, None, date ]] return [(header, newResult2)]
def parseTravelTime(content): filename = 'traveltime.csv' header = ['hydroId', 'travelTime', 'outflowPastStage1', 'outflowPastStage2', 'outflowPastStage3', 'outflowPastStage4', 'outflowPastStage5', 'outflowPastStage6'] result = [] lines = content.splitlines()[1:] for line in lines: if '&' in line or line.strip() == '': continue if 'VI' in line[:2]: result.append([ tryGetFromString(line, 4, 7, int), tryGetFromString(line, 9, 12), tryGetFromString(line, 14, 19, float), tryGetFromString(line, 20, 24, float), tryGetFromString(line, 25, 29, float), tryGetFromString(line, 30, 34, float), tryGetFromString(line, 35, 39, float), tryGetFromString(line, 40, 44, float) ]) return [(filename, header, result)]
def parsePumpingStation(content): filename = 'pumpingStation.csv' header = [ 'station', 'subsystem', 'stationName', 'hydroUpstream', 'hydroDownstream', 'minFlow', 'maxFlow', 'consumptionRate' ] result = [] lines = content.splitlines()[1:] for line in lines: if '&' in line or line.strip() == '': continue if 'UE' in line: patInfo = [] result.append([ tryGetFromString(line, 4, 7, int), tryGetFromString(line, 9, 11, int), tryGetFromString(line, 14, 26), tryGetFromString(line, 29, 32, int), tryGetFromString(line, 34, 37, int), tryGetFromString(line, 39, 49, float), tryGetFromString(line, 50, 59, float), tryGetFromString(line, 60, 69, float) ]) return [(filename, header, result)]
def parseTotalIteration(content): result = {} lines = content.splitlines()[1:] for line in lines: if '&' in line or line.strip() == '': continue if 'NI' in line: result['totalIterations'] = tryGetFromString( line, 4, 7, float, 10.0) result['maximumIteration'] = tryGetFromString(line, 8, 9, int, 0) == 0 return result
def storedEnergySubsytem(content): header = [ 'subsystem', 'number', 'inic', 'sem_01', 'sem_02', 'sem_03', 'sem_04', 'sem_05', 'sem_06', 'deck_date' ] result = [] lines = content.splitlines()[1:] validy = False count = 0 date = datetime.datetime.strptime(lines[3][98:109], "%d/%m/%Y").strftime("%Y-%m-%d") for line in lines: if 'ENERGIA ARMAZENADA NOS SUBSISTEMAS' in line: validy = True if validy == True: if 'X-' in line: count = count + 1 else: if count == 2: sem1 = line[30:36].strip() sem2 = line[37:43].strip() sem3 = line[44:50].strip() sem4 = line[51:57].strip() sem5 = line[58:64].strip() sem6 = line[65:71].strip() result.append([ tryGetFromString(line, 4, 16), tryGetFromString(line, 17, 21), tryGetFromString(line, 22, 29), sem1, sem2, sem3, sem4, sem5, sem6, date ]) elif count == 3: break newResult = [] for data in result: newResult.append([x if x != '' else None for x in data]) if len(newResult) == 0: newResult = [[ None, None, None, None, None, None, None, None, None, date ]] return [(header, newResult)]
def parseFillRate(content): filename = 'fillRate.csv' header = ['hydroelectric', 'subsystem'] result = [] lines = content.splitlines()[1:] for line in lines: if '&' in line or line.strip() == '': continue if 'VM' in line: result.append([ tryGetFromString(line, 4, 7, int), tryGetFromString(line, 9, 11, float), ]) return [(filename, header, result)]
def parseIrrigRate(content): filename = 'irrigRate.csv' header = [ 'hidroId', 'divertedFlow1', 'divertedFlow2', 'divertedFlow3', 'divertedFlow4', 'divertedFlow5', 'divertedFlow6' ] result = [] lines = content.splitlines()[1:] for line in lines: if '&' in line or line.strip() == '': continue if 'TI' in line: patInfo = [] result.append([ tryGetFromString(line, 5, 7, int), tryGetFromString(line, 8, 14, float), tryGetFromString(line, 15, 19, float), tryGetFromString(line, 20, 24, float), tryGetFromString(line, 25, 29, float), tryGetFromString(line, 30, 34, float), tryGetFromString(line, 35, 39, float) ]) return [(filename, header, result)]
def parseHistoricOutflow(content): filename = 'historicOutflow.csv' header = [ 'reservatoryId', 'minFlow1', 'minFlow2', 'minFlow3', 'minFlow4', 'minFlow5', 'minFlow6' ] result = [] lines = content.splitlines()[1:] for line in lines: if '&' in line or line.strip() == '': continue if 'RQ' in line: patInfo = [] result.append([ tryGetFromString(line, 5, 7, int), tryGetFromString(line, 8, 14, float), tryGetFromString(line, 15, 19, float), tryGetFromString(line, 20, 24, float), tryGetFromString(line, 25, 29, float), tryGetFromString(line, 30, 34, float), tryGetFromString(line, 35, 39, float) ]) return [(filename, header, result)]
def parseSpecialBasins(content): filename = 'specialBasins.csv' header = [ 'name', 'subsystem', 'stage', 'generationPat1', 'generationPat2', 'generationPat3', 'gravityLost' ] result = [] lines = content.splitlines()[1:] for line in lines: if '&' in line or line.strip() == '': continue if 'BE' in line: patInfo = [] result.append([ tryGetFromString(line, 4, 14), tryGetFromString(line, 14, 16, int), tryGetFromString(line, 19, 21, int), tryGetFromString(line, 24, 29, float), tryGetFromString(line, 30, 34, float), tryGetFromString(line, 35, 39, float), tryGetFromString(line, 40, 44, float) ]) return [(filename, header, result)]
def parseOpRev(content): filename = 'opRev.csv' header = ['mnemonico', 'inicialStage', 'finalStage'] result = [] lines = content.splitlines()[1:] for line in lines: if '&' in line or line.strip() == '': continue if 'RV' in line: result.append([ tryGetFromString(line, 4, 11), tryGetFromString(line, 14, 15, int), tryGetFromString(line, 19, 20, int) ]) return [(filename, header, result)]
def parseIntervalMonth(content): filename = 'intervalMonth.csv' header = ['month', 'week'] result = [] lines = content.splitlines()[1:] for line in lines: if '&' in line or line.strip() == '': continue if 'GS' in line: patInfo = [] result.append([ tryGetFromString(line, 4, 6, int), tryGetFromString(line, 9, 10, int) ]) return [(filename, header, result)]
def usefulVolReservoirs(content): header = [ 'number', 'name', 'inic', 'sem_01', 'sem_02', 'sem_03', 'sem_04', 'sem_05', 'deck_date' ] result = [] lines = content.splitlines()[1:] validy = False count = 0 date = datetime.datetime.strptime(lines[3][98:109], "%d/%m/%Y").strftime("%Y-%m-%d") for line in lines: if 'VOLUME UTIL DOS RESERVATORIOS' in line: validy = True if validy == True: if 'X-' in line: count = count + 1 else: if count == 2: sem1 = line[30:36].strip() sem2 = line[37:43].strip() sem3 = line[44:50].strip() sem4 = line[51:57].strip() sem5 = line[58:65].strip() result.append([ tryGetFromString(line, 4, 8, int), tryGetFromString(line, 9, 21), tryGetFromString(line, 22, 29, float), sem1, sem2, sem3, sem4, sem5, date ]) elif count == 3: break newResult = [] for data in result: newResult.append([x if x != '' else None for x in data]) return [(header, newResult)]
def parseStoredEnergy(content): filename = 'storedEnergy.csv' header = ['hidroId', 'usefulVolume'] result = [] lines = content.splitlines()[1:] for line in lines: if '&' in line or line.strip() == '': continue if 'EZ' in line: patInfo = [] result.append([ tryGetFromString(line, 4, 7, int), tryGetFromString(line, 9, 14, float) ]) return [(filename, header, result)]
def marginalCost(content): header = [ 'ssis', 'sem_01', 'sem_02', 'sem_03', 'sem_04', 'sem_05', 'deck_date' ] result = [] lines = content.splitlines()[1:] validy = False count = 0 date = datetime.datetime.strptime(lines[3][98:109], "%d/%m/%Y").strftime("%Y-%m-%d") for line in lines: if 'CUSTO MARGINAL DE OPERACAO' in line: validy = True if validy == True: if 'X-' in line: count = count + 1 else: if count == 2: sem1 = line[11:21].strip() sem2 = line[22:32].strip() sem3 = line[33:43].strip() sem4 = line[44:54].strip() sem5 = line[55:65].strip() result.append([ tryGetFromString(line, 4, 10), sem1, sem2, sem3, sem4, sem5, date ]) elif count == 3: break newResult = [] for data in result: newResult.append([x if x != '' else None for x in data]) #Logic for Pat with Region i = 3 for trash in range(5): ssis = newResult[i][0][3:] for c in range(3): elementOne = newResult[i - c - 1][0] + ssis newResult[i - c - 1][0] = elementOne i += 4 return [(header, newResult)]
def parseAnticipationLag(content): filename = 'anticipationLag.csv' header = ['thermalId', 'subsystem', 'dispatchAnticipationLag'] result = [] lines = content.splitlines()[1:] for line in lines: if '&' in line or line.strip() == '': continue if 'NL' in line: patInfo = [] result.append([ tryGetFromString(line, 4, 7, int), tryGetFromString(line, 9, 11, int), tryGetFromString(line, 14, 15, int) ]) return [(filename, header, result)]
def parseFutureCostDef(content): filename = 'futureCostDef.csv' header = ['mnemonico', 'mnemonicoOption', 'scenarioPrinted'] result = [] lines = content.splitlines()[1:] for line in lines: if '&' in line or line.strip() == '': continue if 'IR' in line: patInfo = [] result.append([ tryGetFromString(line, 4, 11), tryGetFromString(line, 14, 16, int), tryGetFromString(line, 19, 21, int) ]) return [(filename, header, result)]
def parseDiscountRate(content): result = {} lines = content.splitlines()[1:] for line in lines: if '&' in line or line.strip() == '': continue if 'TX' in line: result['discountRate'] = tryGetFromString(line, 4, 9, float, 10.0) return result
def exchangeFlow(content): header = [ 'interc', 'pat', 'sem_01', 'sem_02', 'sem_03', 'sem_04', 'sem_05', 'deck_date' ] result = [] lines = content.splitlines()[1:] validy = False count = 0 date = datetime.datetime.strptime(lines[3][98:109], "%d/%m/%Y").strftime("%Y-%m-%d") for line in lines: if 'FLUXO NOS INTERCAMBIOS' in line: validy = True if validy == True: if 'X-' in line: count = count + 1 else: if count == 2: sem1 = line[18:28].strip() sem2 = line[29:39].strip() sem3 = line[40:50].strip() sem4 = line[51:61].strip() sem5 = line[62:73].strip() result.append([ tryGetFromString(line, 4, 10), tryGetFromString(line, 11, 17), sem1, sem2, sem3, sem4, sem5, date ]) elif count == 3: break newResult = [] for data in result: newResult.append([x if x != '' else None for x in data]) return [(header, newResult)]
def parseExchangeLimits(content): filename = 'exchangelimit.csv' header = [ 'stageIndex', 'fromSubsystem', 'toSubsystem', 'usePenalty', 'limitFromToPat1', 'limitToFromPat1', 'limitFromToPat2', 'limitToFromPat2', 'limitFromToPat3', 'limitToFromPat3', 'limitFromToPat4', 'limitToFromPat4', 'limitFromToPat5', 'limitToFromPat5', ] result = [] lines = content.splitlines()[1:] for line in lines: if '&' in line or line.strip() == '': continue if 'IA' in line: patInfo = [] for i in range(5): patInfo.append(tryGetFromString( line, 19 + i*20, 29 + i*20, float)) patInfo.append(tryGetFromString( line, 29 + i*20, 39 + i*20, float)) result.append([ tryGetFromString(line, 4, 6, int), tryGetFromString(line, 9, 11), tryGetFromString(line, 14, 16), tryGetFromString(line, 17, 18, int, 0), *patInfo ]) return [(filename, header, result)]
def getInfo(line, pat, date): result.append([ tryGetFromString(line, 4, 8, int), tryGetFromString(line, 9, 21), tryGetFromString(line, 22, 29, float), tryGetFromString(line, 30, 37, float), tryGetFromString(line, 38, 45, float), tryGetFromString(line, 46, 53, float), tryGetFromString(line, 54, 61, float), pat, date ]) return result
def parseConvergenceTol(content): result = {} lines = content.splitlines()[1:] for line in lines: if '&' in line or line.strip() == '': continue if 'GP' in line: result['convergenceTolerance'] = tryGetFromString( line, 4, 14, float, 0.001) return result
def parsePlAlgo(content): filename = 'plAlgo.csv' header = ['mnemonico'] result = [] lines = content.splitlines()[1:] for line in lines: if '&' in line or line.strip() == '': continue if 'PD' in line: result.append([tryGetFromString(line, 4, 10)]) return [(filename, header, result)]
def parseMaintenanceThermal(content): filename = 'maintthermal.csv' header = ['thermalId', 'subsystem'] result = [] lines = content.splitlines()[1:] for line in lines: if '&' in line or line.strip() == '': continue if 'MT' in line: patInfo = [] stageId = 0 lastInfo = 0 while lastInfo != -1: lastInfo = tryGetFromString(line, 14 + stageId * 5, 19 + stageId * 5, float, -1) if lastInfo == -1: break patInfo.append(lastInfo) stageId = stageId + 1 result.append([ tryGetFromString(line, 4, 7, int), tryGetFromString(line, 9, 11, int), *patInfo ]) if len(result) != 0: for i in range(len(result[0]) - 2): header.append('maintFactorStage{}'.format(i + 1)) return [(filename, header, result)]
def parseStairRestrictions(content): filename = 'stairRestrictions.csv' header = ['mnemonico'] result = [] lines = content.splitlines()[1:] for line in lines: if '&' in line or line.strip() == '': continue if 'RC' in line: patInfo = [] result.append([tryGetFromString(line, 4, 10)]) return [(filename, header, result)]