Ir para conteúdo
  • 0

Base TXT


Paulo Cesar

Pergunta

8 respostass a esta questão

Posts Recomendados

  • 0
  • Alunos

Bom dia @Paulo Cesar.
A solução desse problema é programação mesmo, o que não é minha praia.
EDI normalmente é bem complicado, então as empresas tem um sistema 
próprio para isso ou usam o serviço de um portal genérico, onde recebem
os arquivos, alteram e respondem.
(já trabalhei numa interface do primeiro caso e foi osso...>>)

Se você só precisa alterar alguns campos, acredito que o caminho é esse que
você está explorando:
- ler o arquivo desejado
- encontrar o campo a alterar pela posição
- sobrescrever o campo com a nova informação  
- salvar o arquivo alterado -> aqui penso que o arquivo muda de nome para 
  ser enviado e identificado pelo receptor como arquivo de resposta.

Se a alteração é "fixa" ou pode ser calculada por uma regra, acredito que funciona bem.

Se a alteração for variável, dependendo de informação do usuário, aí já vai precisar 
de uma tela, é mais trabalhoso.

Mais que isso não consigo te ajudar, amigo.

Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos
22 horas atrás, Henrique Merola Faria disse:

Se é só um arquivo xls que você precisa, está em anexo.
Pelo jeito, é um arquivo EDI, com vários registros diferentes (por isso não tem cabeçalho)

É só isso mesmo que vc precisa ?
 

2024770000028052.xlsx 14.27 kB · 2 downloads

Bom dia @Henrique Merola Faria os dados ficam assim mesmo ou tenho ajustar na mão as colunas

Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos

Bom dia @Paulo Cesar , desse jeito não tem como usar.
Na mão, não compensa, a não ser que seja somente dessa vez e nunca mais....

Salvo engano, ali tem 18 tipos de blocos diferentes, cada um com pedaço da informação, sendo
que cada coluna tem um campo, que não é identificado. A identificação vc tem de pegar do 
manual que descreve o serviço de origem do arquivo.
A primeira coluna é o nome do bloco, ela é a referências para as transformações -- editado

A grosso modo, o que vc precisará fazer no Power BI:
- identificar quais blocos vc precisa realmente      (pouco provável que vá usar todos)
- fazer múltiplas cargas do arquivo, gerando  uma consulta para cada bloco 
 > a opção Referência de consulta no power query vai bem aqui.
 > usa o opção de Fonte de dados = texto/csv e muda o delimitador para "|"
  > usa o registro VW_CSF_NOTA_FISCAL como dimensão, para fazer os relacionamentos
- inserir os nomes das colunas em cada consulta manualmente
- fazer outras transformações necessárias

Assim você tem o modelo de dados convencional para usar no Power BI.

Qualquer coisa, manda aqui !
 


 

Editado por Henrique Merola Faria
Complementando informação
Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos
Em 28/08/2024 em 10:55, Henrique Merola Faria disse:

Bom dia @Paulo Cesar , desse jeito não tem como usar.
Na mão, não compensa, a não ser que seja somente dessa vez e nunca mais....

Salvo engano, ali tem 18 tipos de blocos diferentes, cada um com pedaço da informação, sendo
que cada coluna tem um campo, que não é identificado. A identificação vc tem de pegar do 
manual que descreve o serviço de origem do arquivo.
A primeira coluna é o nome do bloco, ela é a referências para as transformações -- editado

A grosso modo, o que vc precisará fazer no Power BI:
- identificar quais blocos vc precisa realmente      (pouco provável que vá usar todos)
- fazer múltiplas cargas do arquivo, gerando  uma consulta para cada bloco 
 > a opção Referência de consulta no power query vai bem aqui.
 > usa o opção de Fonte de dados = texto/csv e muda o delimitador para "|"
  > usa o registro VW_CSF_NOTA_FISCAL como dimensão, para fazer os relacionamentos
- inserir os nomes das colunas em cada consulta manualmente
- fazer outras transformações necessárias

Assim você tem o modelo de dados convencional para usar no Power BI.

Qualquer coisa, manda aqui !
 


 

@Henrique Merola Fariabom dia!

Tudo bem?

Na verdade não precisa por no BI não seria mesmo no Excel, agora não sei se em Python resolveria, eu acho que vai utilizar todas as colunas porque quando eles recebem esse arquivo eles fazer algumas alterações em relação a peso do produto e depois eles tem que voltar esse arquivo no mesmo formato que recebeu. Eu tenho um scripit em Python, ele pega a data do cabeçalho e cria uma coluna no final com essa data.

image.png.4c35948a752002fcb78d4143fc61ed94.png

def processar_arquivo(entrada, saida):
    def converter_data(data):
        if len(data) == 8 and data.isdigit():
            dia = data[0:2]
            mes = data[2:4]
            ano = data[4:8]
            return f"{dia}/{mes}/{ano}"
        else:
            raise ValueError(f"Formato de data inválido: {data}")

    try:
        with open(entrada, 'r', encoding='utf-8') as file:
            lines = file.readlines()
            print(f"{len(lines)} linhas lidas do arquivo {entrada}.")
    except UnicodeDecodeError:
        try:
            with open(entrada, 'r', encoding='latin-1') as file:
                lines = file.readlines()
                print(f"{len(lines)} linhas lidas do arquivo {entrada} com codificação latin-1.")
        except Exception as e:
            print(f"Erro ao abrir o arquivo {entrada}: {e}")
            return
    except FileNotFoundError:
        print(f"Erro: O arquivo {entrada} não foi encontrado.")
        return
    except Exception as e:
        print(f"Erro ao abrir o arquivo {entrada}: {e}")
        return

    data_atual = ""
    resultado = []

    for line in lines:
        if line.startswith('|I200'):
            partes = line.split('|')
            if len(partes) > 3:
                try:
                    data_atual = converter_data(partes[3])
                    print(f"Data atualizada para {data_atual} na linha {line.strip()}")
                except ValueError as ve:
                    print(ve)
                    continue
            else:
                print(f"Erro: Linha malformada {line.strip()}")
        elif line.startswith('|I250'):
            line = line.strip() + '|' + data_atual + '|\n'
            print(f"Linha modificada para {line.strip()}")
        resultado.append(line)

    try:
        with open(saida, 'w', encoding='utf-8') as file:
            file.writelines(resultado)
            print(f"Arquivo de saída {saida} Criado com Sucesso.")
    except Exception as e:
        print(f"Erro ao escrever no arquivo {saida}: {e}")

# Exemplo de uso
entrada = '07607884000196-29202839138-20220101-20221231-G-25D6A5B48B27F3B9B0F00B7A64090FCA112152FC-1-SPED-ECD.txt'
saida =   '07607884000196-29202839138-20220101-20221231-G-25D6A5B48B27F3B9B0F00B7A64090FCA112152FC-1-SPED-ECD.txt'
processar_arquivo(entrada, saida)
Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos
Em 03/09/2024 em 11:21, Henrique Merola Faria disse:

Bom dia @Paulo Cesar.
A solução desse problema é programação mesmo, o que não é minha praia.
EDI normalmente é bem complicado, então as empresas tem um sistema 
próprio para isso ou usam o serviço de um portal genérico, onde recebem
os arquivos, alteram e respondem.
(já trabalhei numa interface do primeiro caso e foi osso...>>)

Se você só precisa alterar alguns campos, acredito que o caminho é esse que
você está explorando:
- ler o arquivo desejado
- encontrar o campo a alterar pela posição
- sobrescrever o campo com a nova informação  
- salvar o arquivo alterado -> aqui penso que o arquivo muda de nome para 
  ser enviado e identificado pelo receptor como arquivo de resposta.

Se a alteração é "fixa" ou pode ser calculada por uma regra, acredito que funciona bem.

Se a alteração for variável, dependendo de informação do usuário, aí já vai precisar 
de uma tela, é mais trabalhoso.

Mais que isso não consigo te ajudar, amigo.

@Henrique Merola Fariabom dia!

Obrigado pela ajuda!

  • Like 1
Link para o comentário
Compartilhar em outros sites

Faça login para comentar

Você vai ser capaz de deixar um comentário após fazer o login



Entrar Agora
×
×
  • Criar Novo...