def le_se_tem_valor(digitos: int, linha: str, coluna_inicio: int): coluna_fim = coluna_inicio + digitos trecho = linha[coluna_inicio:coluna_fim].strip() valor = None if len(trecho) > 0 and "---" not in trecho: reg = RegistroFn(digitos) valor = reg.le_registro(linha, coluna_inicio) else: valor = np.nan return valor
def le(self): reg_codigo = RegistroIn(3) reg_subsis = RegistroIn(2) reg_nome = RegistroAn(10) reg_estagio = RegistroIn(2) reg_inflex = RegistroFn(5) reg_disp = RegistroFn(5) reg_cvu = RegistroFn(10) self._dados[0] = reg_codigo.le_registro(self._linha, 4) self._dados[1] = reg_subsis.le_registro(self._linha, 9) self._dados[2] = reg_nome.le_registro(self._linha, 14) self._dados[3] = reg_estagio.le_registro(self._linha, 24) for j in range(3): self._dados[4 + 3 * j] = reg_inflex.le_registro(self._linha, 29 + 20 * j) self._dados[5 + 3 * j] = reg_disp.le_registro(self._linha, 34 + 20 * j) self._dados[6 + 3 * j] = reg_cvu.le_registro(self._linha, 39 + 20 * j)
def le(self): reg_cod = RegistroIn(3) reg_subsistema = RegistroIn(2) reg_estagio = RegistroIn(2) reg_geracao = RegistroFn(10) reg_duracao = RegistroFn(5) reg_data = RegistroAn(8) self._dados[0] = reg_cod.le_registro(self._linha, 4) self._dados[1] = reg_subsistema.le_registro(self._linha, 9) self._dados[2] = reg_estagio.le_registro(self._linha, 14) self._dados[3] = reg_geracao.le_registro(self._linha, 19) if len(self._linha[29:34].strip()) > 0: self._dados[4] = reg_duracao.le_registro(self._linha, 29) self._dados[5] = reg_geracao.le_registro(self._linha, 34) if len(self._linha[44:49].strip()) > 0: self._dados[6] = reg_duracao.le_registro(self._linha, 44) self._dados[7] = reg_geracao.le_registro(self._linha, 49) if len(self._linha[59:64].strip()) > 0: self._dados[8] = reg_duracao.le_registro(self._linha, 59) self._dados[9] = reg_data.le_registro(self._linha, 65)
def le(self, arq: IO): def converte_tabela_para_df() -> pd.DataFrame: df = pd.DataFrame(tabela) cols = [ "Despacho Pat. 1", "Duração Pat. 1", "Despacho Pat. 2", "Duração Pat. 2", "Despacho Pat. 3", "Duração Pat. 3", "Custo" ] df.columns = cols df["Subsistema"] = subsistemas df["Usina"] = usinas df["Lag"] = lags df["Estágio"] = semanas df["Início Semana"] = inicio_semanas df = df[["Subsistema", "Usina", "Lag", "Estágio", "Início Semana"] + cols] return df # Variáveis auxiliares str_tabela = "Sinalizacao de Despacho antecipado em k meses" reg_subsis = RegistroAn(3) reg_usina = RegistroAn(11) reg_lag = RegistroIn(7) reg_semana = RegistroAn(7) reg_despacho = RegistroFn(8) reg_duracao = RegistroFn(7) reg_custo = RegistroFn(10) reg_inicio = RegistroAn(12) subsistemas = [] usinas = [] lags = [] semanas = [] inicio_semanas = [] # Salta uma linha e extrai a semana tabela = np.zeros((MAX_ESTAGIOS * 10, 7)) i = 0 achou_tabela = False while True: linha = arq.readline() # Verifica se acabou if BlocoRelatorioOperacaoRelGNL.str_fim in linha: tabela = tabela[:i, :] self._dados = converte_tabela_para_df() break # Senão, procura a linha que identifica o subsistema if str_tabela in linha: achou_tabela = True # Salta 4 linhas for _ in range(4): arq.readline() elif len(linha) < 5: achou_tabela = False # Se está lendo um subsistema e achou a linha de valores médios elif achou_tabela: subsistemas.append(reg_subsis.le_registro(linha, 4)) usinas.append(reg_usina.le_registro(linha, 8)) lags.append(reg_lag.le_registro(linha, 20)) semanas.append(reg_semana.le_registro(linha, 28)) inicio_semanas.append(reg_inicio.le_registro(linha, 98)) tabela[i, 0] = reg_despacho.le_registro(linha, 36) tabela[i, 1] = reg_duracao.le_registro(linha, 44) tabela[i, 2] = reg_despacho.le_registro(linha, 53) tabela[i, 3] = reg_duracao.le_registro(linha, 61) tabela[i, 4] = reg_despacho.le_registro(linha, 70) tabela[i, 5] = reg_duracao.le_registro(linha, 78) tabela[i, 6] = reg_custo.le_registro(linha, 87) i += 1
def le(self, arq: IO): def converte_tabela_em_df() -> pd.DataFrame: colunas = [ "Iteração", "Zinf", "Zsup", "Gap (%)", "Tempo (s)", "Tot. Def. Demanda (MWmed)", "Tot. Def. Niv. Seg. (MWmes)", "Num. Inviab", "Tot. Inviab (MWmed)", "Tot. Inviab (m3/s)", "Tot. Inviab (Hm3)" ] tipos = { "Iteração": np.int64, "Zinf": np.float64, "Zsup": np.float64, "Gap (%)": np.float64, "Tempo (s)": np.int64, "Tot. Def. Demanda (MWmed)": np.float64, "Tot. Def. Niv. Seg. (MWmes)": np.float64, "Num. Inviab": np.int64, "Tot. Inviab (MWmed)": np.float64, "Tot. Inviab (m3/s)": np.float64, "Tot. Inviab (Hm3)": np.float64 } df = pd.DataFrame(tabela, columns=colunas) df = df.astype(tipos) return df # Salta 9 linhas linha for _ in range(9): arq.readline() reg_iter = RegistroIn(4) reg_z = RegistroFn(12) reg_gap = RegistroFn(16) reg_tempo = RegistroAn(8) reg_def_demanda = RegistroFn(10) reg_def_niv_seg = RegistroFn(12) reg_num_inviab = RegistroIn(7) reg_tot_inviab = RegistroFn(12) tabela = np.zeros((999, 11)) i = 0 while True: # Confere se a leitura não acabou linha = arq.readline() if len(linha) < 5: tabela = tabela[:i, :] self._dados = converte_tabela_em_df() break if "----" in linha: continue # Senão, lê mais uma linha tabela[i, 0] = reg_iter.le_registro(linha, 4) if "*" in linha[9:21]: tabela[i, 1] = np.nan else: tabela[i, 1] = reg_z.le_registro(linha, 9) if "*" in linha[22:34]: tabela[i, 2] = np.nan else: tabela[i, 2] = reg_z.le_registro(linha, 22) tabela[i, 3] = reg_gap.le_registro(linha, 35) tempo = reg_tempo.le_registro(linha, 52) parcelas = tempo.split(":") segundos = (int(parcelas[0]) * 3600 + int(parcelas[1]) * 60 + int(parcelas[2])) tabela[i, 4] = segundos tabela[i, 5] = reg_def_demanda.le_registro(linha, 61) if str(linha[72:85]).isnumeric(): tabela[i, 6] = reg_def_niv_seg.le_registro(linha, 72) else: tabela[i, 6] = np.nan tabela[i, 7] = reg_num_inviab.le_registro(linha, 85) tabela[i, 8] = reg_tot_inviab.le_registro(linha, 93) tabela[i, 9] = reg_tot_inviab.le_registro(linha, 106) tabela[i, 10] = reg_tot_inviab.le_registro(linha, 119) i += 1