MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

Obrigado

Administração do MaximoAccess

Dicas Ms Access, Exemplos Ms Access, Codigos VBA Ms Access, SQL Ms Access

    [Resolvido]Importar TXT para tabela linha a linha

    Compartilhe

    microfit
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 7
    Registrado : 06/12/2016

    [Resolvido]Importar TXT para tabela linha a linha

    Mensagem  microfit em 30/12/2017, 00:35

    Boa noite amigos!

    Meu desafio é o seguinte...

    Tenho um arquivo txt que é gerado de minha lojavirtual e preciso importa-lo para minha tabela.
    E meu grande problema é, as informaçoes que devem ser importadas do txt para a tabela, sao organizadas linha a linha no arquivo txt.

    Exemplo:
    No txt esta assim

    CodigoCliente: 10
    NomeCliente: Fulano de Tal
    Endereco: Rua Primeira 10

    Desta maneira preciso incluir estes dados em minha tabela, com contem os campos de mesmo nome, exemplo.

    CodigoCliente
    NomeCliente
    Endereco

    Obs.
    Cada arquivo txt gerado pela lojavirtual é referente á um unico cadastro.

    Já tentei de todas as maneiras, até onde meu conhecimento pode.
    Por isso gostaria da ajuda dos amigos.

    Em anexo um modelo do txt
    Um grande abraço a todos.
    Anexos
    24.txt
    Você não tem permissão para fazer download dos arquivos anexados.
    (1 Kb) Baixado 23 vez(es)
    avatar
    ahteixeira
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 5295
    Registrado : 15/03/2013

    Re: [Resolvido]Importar TXT para tabela linha a linha

    Mensagem  ahteixeira em 3/1/2018, 08:36

    Olá Trindade, Bem-Vindo ao fórum.

    Já tentou a "Busca" aqui do fórum, veja como fazer:
    [Você precisa estar registrado e conectado para ver este link.]

    Este por exemplo:
    [Você precisa estar registrado e conectado para ver este link.]

    Abraço

    microfit
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 7
    Registrado : 06/12/2016

    Maravilha mestre!

    Mensagem  microfit em 4/1/2018, 20:58

    Vou fazer os testes e já retorno, estando tudo certo, publicarei no exemplos!
    Grande abraço!
    avatar
    ahteixeira
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 5295
    Registrado : 15/03/2013

    Re: [Resolvido]Importar TXT para tabela linha a linha

    Mensagem  ahteixeira em 5/1/2018, 12:17

    Olá Trindade Junior,

    Através do exemplo do tópico abaixo, adaptei para o que pretende:
    [Você precisa estar registrado e conectado para ver este link.]

    Veja o código uilizado:
    Código:
    Option Compare Database
    'requer referencia Microsoft Scripting Runtime
    Dim fso As New FileSystemObject
    Dim fld As folder


    Private Sub cmdImportar_Click()
    '------------------------------------------------------------
    ' IMPORTAR VARIOS FICHEIROS TXT DE UMA PASTA
    ' ahteixeira 2018 - maximoaccess
    '------------------------------------------------------------
                
    Dim sFol As String, sFile As String, strLinha As String, nDirs As Long, _
        linha As Double, nFiles As Long, tFld As folder, tFil As File, FileName As String
      
    Dim sCodigoPedido, sDataPedido, sLocalVenda, sStatus


    On Error GoTo IMPORTAR_Err
          
                    sFol = Me.Local & "\"
           sFile = "*.txt"
          
           Set fld = fso.GetFolder(sFol)
           FileName = Dir(fso.BuildPath(fld.Path, sFile), vbNormal Or _
                          vbHidden Or vbSystem Or vbReadOnly)
          
           If Len(FileName) > 0 Then
              
               While Len(FileName) <> 0
            
                  nFiles = nFiles + 1
                  
                        'ficheiro ler
                        Open fso.BuildPath(fld.Path, FileName) For Input As #1
                        
                        linha = 0
                        
                        'ler linha a linha até ao fim do ficheiro
                        Do Until EOF(1)
                            linha = linha + 1
                            Line Input #1, strLinha
                                
                                If linha = 1 Then sCodigoPedido = Replace(strLinha, "CodigoPedido ", "")
                                If linha = 2 Then sDataPedido = Replace(strLinha, "DataPedido ", "")
                                If linha = 3 Then sLocalVenda = Replace(strLinha, "LocalVenda ", "")
                                If linha = 4 Then sStatus = Replace(strLinha, "Status ", "")
                        Loop
                        
                        'fechar ficheiro
                        Close #1
                        DoEvents
                        
                        'consulta acrescentar dados à tabela
                        CurrentDb.Execute "INSERT INTO tblPedidos (CodigoPedido, DataPedido, LocalVenda, Status) SELECT " _
                                          & sCodigoPedido & " , '" & sDataPedido & "' , '" & sLocalVenda & "' , '" & sStatus & "';"
                        
                        DoEvents
                        
                        'se quisermos eliminar o ficheiro importado
                        'Kill fso.BuildPath(fld.Path, FileName)
                        
                  ' Obter ficheiro seguinte
                  FileName = Dir()
                  DoEvents
               Wend
        
                  MsgBox "Processados  " & nFiles & "  ficheiro(s).", vbInformation, ""
              Else
                  MsgBox "Não foram encontrados ficheiros.", vbInformation, ""
                  Exit Sub
              End If
        
        
    IMPORTAR_Exit:
            Exit Sub
        
    IMPORTAR_Err:
            MsgBox Error$
            Resume IMPORTAR_Exit
        
    End Sub

    Abraço
    Anexos
    ImportarVariosTXTdeUmaPasta.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (27 Kb) Baixado 12 vez(es)

    microfit
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 7
    Registrado : 06/12/2016

    Re: [Resolvido]Importar TXT para tabela linha a linha

    Mensagem  microfit em 5/1/2018, 14:03

    Só falta a cereja do bolo!
    Mestre testei seu ultimo exemplo, 100% funcional exatamente isso!

    Porem...
    Os arquivos txt que recebo possuem : após o nome de referencia da linha.
    Conforme exemplo abaixo.

    CodigoPedido: 24
    DataPedido: 2017-12-15-15:25
    LocalVenda: MERCADO LIVRE
    Status: A ENVIAR

    Assim, inclui o sinal : após cada referencia da linha, conforme necessito, entao apresentou o erro:
    ERRO de sintaxe (operador faltando) na expressão de consulta 'CodigoPedido:24'.

    Obs. Sem o sinal : funciona perfeitamente da maneira correta!
    Desde já, obrigado pela ajuda mestre!


    Última edição por microfit em 6/1/2018, 15:26, editado 1 vez(es)
    avatar
    ahteixeira
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 5295
    Registrado : 15/03/2013

    Re: [Resolvido]Importar TXT para tabela linha a linha

    Mensagem  ahteixeira em 5/1/2018, 14:16

    Olá Trindade Junior,

    Obrigado pelo retorno, estou no celular, mas é só ajustar as 4 linhas onde tem o REPLACE
    Adicione os dois pontos, exemplo:

    If linha = 1 Then sCodigoPedido = Replace(strLinha, "CodigoPedido: ", "")

    Abraço

    microfit
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 7
    Registrado : 06/12/2016

    Re: [Resolvido]Importar TXT para tabela linha a linha

    Mensagem  microfit em 6/1/2018, 04:24

    Boa mestre... agora para fechar com chave de ouro!
    Tenho mais um desafio...

    Até agora esta perfeito, todos os teste estao funcionais, porem...
    Algumas linhas do .txt original possuem campos "na mesma linha" preciso que este campos sejam incluidos em colunas na tabela.
    Cada campo do txt deve ser separado e inserido em colunas da tabela.
    Este campos na txt sao separados por | abaixo exemplo:

    ProdutoVendido: 22|Nome do Produto|25.6|1|25.6|0|

    Estes devem ficar na tabela:

    CodProduto  NomeProduto        Preco    Unidade   Total
    22               Nome do Produto   25.60   1             25.6

    Mestre, desde já meu muito obrigado pela ajuda.
    Resolvendo este desafio acima resolve minha vida!

    Grande abraço mestre!


    Última edição por microfit em 6/1/2018, 15:26, editado 1 vez(es)
    avatar
    ahteixeira
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 5295
    Registrado : 15/03/2013

    Re: [Resolvido]Importar TXT para tabela linha a linha

    Mensagem  ahteixeira em 6/1/2018, 09:29

    Olá Trindade Júnior,

    Antes de tudo, não deve colocar mais nada no título do tópico, por razões de pesquisa no fórum.
    Coloca-se na primeira mensagem do tópico e depois o sistema repete automaticamente.
    Edite as últimas duas mensagens movendo o texto do título para a caixa de mensagem, ficando em branco.

    Quanto à nova questão, poste alguns txt de exemplo é a tabela que vai receber os dados.
    Assim fica mais fácil para ver o que se pode fazer.

    Abraço

    microfit
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 7
    Registrado : 06/12/2016

    Re: [Resolvido]Importar TXT para tabela linha a linha

    Mensagem  microfit em 6/1/2018, 16:06

    Boa tarde Mestre!

    Em anexo segue minha necessidade.

    Preciso que:
    Os dados da linha no txt após o | sejam incluídos em outro campo da tabela.
    No BD exemplo em anexo sera possível entender melhor.

    Desde já obrigado pela ajuda e já editei as respostas anteriores conforme sua instrução.
    Após este ajuste publicarei o BD funcional, para que possa ajudar outros amigos.

    Grande abraço!
    Anexos
    ImportarTxtPasta.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (47 Kb) Baixado 4 vez(es)
    avatar
    ahteixeira
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 5295
    Registrado : 15/03/2013

    Re: [Resolvido]Importar TXT para tabela linha a linha

    Mensagem  ahteixeira em 15/1/2018, 12:32

    Olá Trindade Junior,

    Para o efeito um SPLIT resolve, está na hora de colocar a mão na massa.
    Fiz a alteração para a linha 5, deverá fazer dentro do mesmo para a linha 6.
    Teste o seu exemplo com o código abaixo:

    Código:
    Option Compare Database
    Option Explicit


    Private Sub cmdImportar_Click()
    '--------------------------------------------------------------------------------
    ' Álvaro Teixeira (ahteixeira) 2018
    ' Importar varios ficheiros TXT de uma pasta e fazer separação em algumas linhas
    ' Para Maximoaccess
    ' http://www.maximoaccess.com/t32187-importar-txt-para-tabela-linha-a-linha
    ' Requer referencia Microsoft Scripting Runtime
    '--------------------------------------------------------------------------------
    Dim fso As New FileSystemObject
    Dim fld As folder

    Dim sFol As String, sFile As String, strLinha As String, nDirs As Long, _
        linha As Double, nFiles As Long, tFld As folder, tFil As File, FileName As String
     
    Dim sCodigoPedido, sDataPedido, sLocalVenda, sStatus, sNomeCliente, sNickCliente, sProdutoVendido
    Dim arrCliente

    On Error GoTo IMPORTAR_Err
         
                    sFol = Me.Local & "\"
          sFile = "*.txt"
         
          Set fld = fso.GetFolder(sFol)
          FileName = Dir(fso.BuildPath(fld.Path, sFile), vbNormal Or _
                          vbHidden Or vbSystem Or vbReadOnly)
         
          If Len(FileName) > 0 Then
             
              While Len(FileName) <> 0
           
                  nFiles = nFiles + 1
                 
                        'ficheiro ler
                        Open fso.BuildPath(fld.Path, FileName) For Input As #1
                       
                        linha = 0
                       
                        'ler linha a linha até ao fim do ficheiro
                        Do Until EOF(1)
                            linha = linha + 1
                            Line Input #1, strLinha
                               
                                If linha = 1 Then sCodigoPedido = Replace(strLinha, "CodigoPedido: ", "")
                                If linha = 2 Then sDataPedido = Replace(strLinha, "DataPedido: ", "")
                                If linha = 3 Then sLocalVenda = Replace(strLinha, "LocalVenda: ", "")
                                If linha = 4 Then sStatus = Replace(strLinha, "Status: ", "")
                               
                                If linha = 5 Then
                                    sNomeCliente = Replace(strLinha, "NomeCliente: ", "")
                                    arrCliente = Split(sNomeCliente, "|")
                                    sNomeCliente = Trim(arrCliente(0))
                                    sNickCliente = Trim(arrCliente(1))
                                End If
                               
                                If linha = 6 Then sProdutoVendido = Replace(strLinha, "ProdutoVendido: ", "")
                        Loop
                       
                        'fechar ficheiro
                        Close #1
                        DoEvents
                       
                        'consulta acrescentar dados à tabela
                        CurrentDb.Execute "INSERT INTO tblPedidos (CodigoPedido, DataPedido, LocalVenda, Status, NomeCliente, NickCliente, CodProduto) SELECT " _
                                          & sCodigoPedido & " , '" & sDataPedido & "' , '" & sLocalVenda & "' , '" & sStatus & "' , '" & sNomeCliente & "','" & sNickCliente & "','" & sProdutoVendido & "';"
                       
                        DoEvents
                       
                        'para eliminar o ficheiro importado
                        'Kill fso.BuildPath(fld.Path, FileName)
                       
                  ' Obter ficheiro seguinte
                  FileName = Dir()
                  DoEvents
              Wend
       
                  MsgBox "Processados  " & nFiles & "  ficheiro(s).", vbInformation, ""
              Else
                  MsgBox "Não foram encontrados ficheiros.", vbInformation, ""
                  Exit Sub
              End If
       
       
    IMPORTAR_Exit:
            Exit Sub
       
    IMPORTAR_Err:
            MsgBox Error$
            Resume IMPORTAR_Exit
       
    End Sub

    Abraço

    microfit
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 7
    Registrado : 06/12/2016

    Re: [Resolvido]Importar TXT para tabela linha a linha

    Mensagem  microfit em 15/1/2018, 13:01

    Ola mestre...

    Partindo de sua instrução inicial...
    Consegui resolver usando exatamente o Split, porem com o MID na linha.

    Mto obrigado pelas dicas mestre.
    Espero que este Topico ajude outros que necessitarem.

    Grato pela experiencia.
    Grande abraço a todos!
    avatar
    ahteixeira
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 5295
    Registrado : 15/03/2013

    Re: [Resolvido]Importar TXT para tabela linha a linha

    Mensagem  ahteixeira em 15/1/2018, 16:49

    Olá Trindade Junior,

    Obrigado pelo retorno, o fórum agradece.

    Abraço

      Data/hora atual: 21/7/2018, 14:50