10 Replies Latest reply: Jul 12, 2016 8:54 AM by Clever Anjos RSS

    Ler varios arquivos de uma pasta

    Carlos Alexandre Souza

      Bom dia!

       

      Preciso ler vários arquivos XML e XLS de uma pasta.

       

      Exemplo:

      1.xml

      2.xml

      3.xml

       

      Os arquivos possuem as mesmas colunas mas esta carregando apenas o primeiro arquivo fiz um teste excluindo o primeiro aí ele passa a carrega o primeiro encontrado.

       

      Coloquei conforme exemplo abaixo e não funcionou

       

      FROM [XML_arquivos\*.xml] (XmlSimple, Table is [mensagemTISS]);

        • Re: Ler varios arquivos de uma pasta
          Yuri Nicolett

          Carlos, a sintaxe é essa mesmo, utilizar o caractere asterisco para ler vários arquivos (ou então por FOR). O que você precisa levar em consideração são os campos que estão sendo carregados.

           

          Para facilitar, consegue postar o script que esta utilizando e se possível os arquivos xml também?

          • Re: Ler varios arquivos de uma pasta
            Carlos Alexandre Souza

            Bom dia!

             

            Não consigo postar as informações não são informações de teste estou tratando arquivos de produção. Tenho informações confidenciais

            • Re: Ler varios arquivos de uma pasta
              Carlos Alexandre Souza

              XMLSUL:
              LOAD quantidadeExecutada,
              valorProcessado,
              [procedimento/codigo] as codigo,
              [procedimento/tipoTabela] as tipoTabela,
              [procedimento/descricao] as descricao,
              %Key_dadosGuia_932648AE386CACC8   // Key to parent table: mensagemTISS/operadoraParaPrestador/demonstrativosRetorno/demonstrativoAnaliseConta/fatura/dadosFatura/lote/dadosLote/guia/dadosGuia
              FROM [XML TESTE\*.xml] (XmlSimple, Table is [mensagemTISS/operadoraParaPrestador/demonstrativosRetorno/demonstrativoAnaliseConta/fatura/dadosFatura/lote/dadosLote/guia/dadosGuia/procedimentos/dadosProcedimento]);

              Left Join(XMLSUL)
              LOAD numeroGuiaPrestador,
              dataRealizacao,
              %Key_demonstrativoAnaliseConta_C282603095E315F3// Key to parent table: mensagemTISS/operadoraParaPrestador/demonstrativosRetorno/demonstrativoAnaliseConta
                 %Key_dadosGuia_932648AE386CACC8   // Key for this table: mensagemTISS/operadoraParaPrestador/demonstrativosRetorno/demonstrativoAnaliseConta/fatura/dadosFatura/lote/dadosLote/guia/dadosGuia
              FROM [XML TESTE\*.xml] (XmlSimple, Table is [mensagemTISS/operadoraParaPrestador/demonstrativosRetorno/demonstrativoAnaliseConta/fatura/dadosFatura/lote/dadosLote/guia/dadosGuia]);

              Left Join(XMLSUL)
              LOAD valorProcessadoGeral,
              valorLiberadoGeral,
              valorGlosaGeral,
              [cabecalhoDemonstrativo/dataEmissao] as dataEmissao,
              [identificacaoFontePagadora/operadoraRegulada/registroANS] as [operadoraRegulada/registroANS],
              [identificacaoFontePagadora/operadoraRegulada/CNPJ] as CNPJ,
              [identificacaoFontePagadora/operadoraRegulada/nomeOperadora] as nomeOperadora,
              %Key_mensagemTISS_AE9B42D256CCB348// Key to parent table: mensagemTISS
                 %Key_demonstrativoAnaliseConta_C282603095E315F3   // Key for this table: mensagemTISS/operadoraParaPrestador/demonstrativosRetorno/demonstrativoAnaliseConta
              FROM [XML TESTE\*.xml] (XmlSimple, Table is [mensagemTISS/operadoraParaPrestador/demonstrativosRetorno/demonstrativoAnaliseConta]);

              Left Join(XMLSUL)
              LOAD [xmlns:ansTISS],
              [cabecalho/identificacaoTransacao/sequencialTransacao] as sequencialTransacao,
              [cabecalho/identificacaoTransacao/dataRegistroTransacao] as dataRegistroTransacao,
              [cabecalho/identificacaoTransacao/horaRegistroTransacao] as horaRegistroTransacao,
              %Key_mensagemTISS_AE9B42D256CCB348// Key for this table: mensagemTISS
                 FileBaseName () AS Competencia
              FROM [XML TESTE\*.xml] (XmlSimple, Table is [mensagemTISS]);

              • Re: Ler varios arquivos de uma pasta
                Carlos Alexandre Souza

                Tem possibilidade de ler todos os arquivos mantendo essa o left join conforme abaixo:

                 

                XMLSUL:
                LOAD quantidadeExecutada,
                valorProcessado,
                [procedimento/codigo] as codigo,
                [procedimento/tipoTabela] as tipoTabela,
                [procedimento/descricao] as descricao,
                %Key_dadosGuia_932648AE386CACC8   // Key to parent table: mensagemTISS/operadoraParaPrestador/demonstrativosRetorno/demonstrativoAnaliseConta/fatura/dadosFatura/lote/dadosLote/guia/dadosGuia
                FROM [XML TESTE\*.xml] (XmlSimple, Table is [mensagemTISS/operadoraParaPrestador/demonstrativosRetorno/demonstrativoAnaliseConta/fatura/dadosFatura/lote/dadosLote/guia/dadosGuia/procedimentos/dadosProcedimento]);

                Left Join(XMLSUL)
                LOAD numeroGuiaPrestador,
                dataRealizacao,
                %Key_demonstrativoAnaliseConta_C282603095E315F3// Key to parent table: mensagemTISS/operadoraParaPrestador/demonstrativosRetorno/demonstrativoAnaliseConta
                   %Key_dadosGuia_932648AE386CACC8   // Key for this table: mensagemTISS/operadoraParaPrestador/demonstrativosRetorno/demonstrativoAnaliseConta/fatura/dadosFatura/lote/dadosLote/guia/dadosGuia
                FROM [XML TESTE\*.xml] (XmlSimple, Table is [mensagemTISS/operadoraParaPrestador/demonstrativosRetorno/demonstrativoAnaliseConta/fatura/dadosFatura/lote/dadosLote/guia/dadosGuia]);

                Left Join(XMLSUL)
                LOAD valorProcessadoGeral,
                valorLiberadoGeral,
                valorGlosaGeral,
                [cabecalhoDemonstrativo/dataEmissao] as dataEmissao,
                [identificacaoFontePagadora/operadoraRegulada/registroANS] as [operadoraRegulada/registroANS],
                [identificacaoFontePagadora/operadoraRegulada/CNPJ] as CNPJ,
                [identificacaoFontePagadora/operadoraRegulada/nomeOperadora] as nomeOperadora,
                %Key_mensagemTISS_AE9B42D256CCB348// Key to parent table: mensagemTISS
                   %Key_demonstrativoAnaliseConta_C282603095E315F3   // Key for this table: mensagemTISS/operadoraParaPrestador/demonstrativosRetorno/demonstrativoAnaliseConta
                FROM [XML TESTE\*.xml] (XmlSimple, Table is [mensagemTISS/operadoraParaPrestador/demonstrativosRetorno/demonstrativoAnaliseConta]);

                Left Join(XMLSUL)
                LOAD [xmlns:ansTISS],
                [cabecalho/identificacaoTransacao/sequencialTransacao] as sequencialTransacao,
                [cabecalho/identificacaoTransacao/dataRegistroTransacao] as dataRegistroTransacao,
                [cabecalho/identificacaoTransacao/horaRegistroTransacao] as horaRegistroTransacao,
                %Key_mensagemTISS_AE9B42D256CCB348// Key for this table: mensagemTISS
                   FileBaseName () AS Competencia
                FROM [XML TESTE\*.xml] (XmlSimple, Table is [mensagemTISS]);

                • Re: Ler varios arquivos de uma pasta
                  Pablo Labbe

                  Carlos,

                   

                    Você deve trabalhar fazer um loop onde a cada arquivo lido você monta uma tabela temporária com as junções necessárias. Ao final das junções você concatena esta tabela temporária a tabela principal que possui os registros de todos os arquivos.

                   

                    Então você deve modificar a lógica do seu script da seguinte formar:

                   

                    - Abra um Loop com comando FOR EACH para ler os xmls da pasta

                    - renomeie o LABEL da tabela  XMLSUL para XMLSUL_TEMP assim como as referencias no join

                    - Ao final da sequencia de  todos os load com JOINS acrescente os comandos


                    //cria tabela principal na primeira iteração e depois concatena autormaticamente na principal a partir da segunda iteração do Loop

                      XMLSUL:

                      LOAD * RESIDENT XMLSUL_TESTE;


                    //remover a tabela temporária que será recriada na leitura do próximo arquivo

                      DROP TABLE XMLSUL_TESTE;

                   

                    - Feche o loop com comando NEXT com o nome da varável declarada lá no FOR.

                   

                  Abraço,

                   

                  Pablo Labbe

                  • Re: Ler varios arquivos de uma pasta
                    Clever Anjos

                    Já conseguiu a resposta? Se sim, escolha uma e marque como "Correta" para fechar o tópico e nos ajudar a manter a comunidade organizada