Пример #1
0
 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
Пример #2
0
 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)
Пример #3
0
 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)
Пример #4
0
    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
Пример #5
0
    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