GD Access    GD Access    Grupo de Discussão  Ir para Categorias  Grupos técnicos  Ir para Fóruns  Access    Importar txt
Go
Novo
Procurar
Notificar
Ferramentas
Responder
  
-star Rating Vote!  Login/Cadastrar 
Programador Pleno

postado
Boa noite pessoal

estou com difuculdade de importar um arquivo txt neste formato


dia---codigo---lote----historico-----------------------------debito-------credito---
01----1000----1000---aaaaaaaaaaaaaaaaaaaaaaaaaa-------500.000,00-------------
02----1001----1000---aaaaaaaaaaaaaaaaaaaaaaaaaa--------------------200.000,00
03----1003----1000---aaaaaaaaaaaaaaaaaaaaaaaaaa------------------------------
-----------------------aaaaaaaaaaaaaaaaaaaaaaaaaa--------50.000,00-------------

como podem ver em alguns casos o historico fica em duas linhas, mas na tabela deve ficar um mesmo registro.

obs: coloquei os "-----" somente para exemplificar. No txt esta em branco.

aguardo ajuda dos colegas

This message has been edited. Last edited by: Elizeu Farias,


Att
Elizeu
elizeudefarias@hotmail.com
 
Postagens: 294 | Registrado: 24 June 2004Reply With QuoteReport This Post
Analista Sênior

Figura de  Renato Santos
postado Hide Post

Elizeu,

Copie parte do arquivo TXT e cole na postagem utilizando-se do [/code] e [code].
Isto preservará a formatação que possui no seu arquivo e facilitará a ajuda.
Sds. Feliz

 
Postagens: 1705 | Localização: Belo Horizonte | Registrado: 22 November 2002Reply With QuoteReport This Post
Analista Júnior

Figura de  Élcio
postado Hide Post
Oi Elizeu.
Eu manipulo arquivos de texto de uma empresa multinacional em que o acesso ao seu banco de dados é impossível, logo para que eu possa fazer o que eles desejam sem acessar sua base, é ler relatórios gerados para arquivos txt.
Assim sendo, eles sempre tem um mesmo padrão, SEMPRE!
No seu caso há a possibilidade de dados estarem numa mesma linha ou não, e que podem estar, dependendo de como vc os visualiza, visto que uma linha de texto pode ser quebrada na visualização. Vc tem que estudar a situação, então, mata a charada:
If Mid(Linha, 1, 7) = "tamsete" then
.....processa
else
If Mid(Linha, 15, 15) = " " then
.....processa ou pula
End if
end if
Vc tem que analisar o arquivo e suas variantes e saber onde existem dados que vc deseja.
É algo muito simples.
Espero que ajude.
Elcio


Elcio Pauli
O Conhecimento é a Alma do Negócio.
 
Postagens: 502 | Localização: Cuiabá-MT | Registrado: 27 January 2002Reply With QuoteReport This Post
Programador Pleno

postado Hide Post
Bom dia Renato Santos e Elcio

Como funciona a opção [/code] e [code]

copiei o texo e colei em seguida clickeu no </> mas nao funcionou, nao sei utilizar esta ferramenta


Att
Elizeu
elizeudefarias@hotmail.com
 
Postagens: 294 | Registrado: 24 June 2004Reply With QuoteReport This Post
Analista Sênior

Figura de  Renato Santos
postado Hide Post

Elizeu,

Na postagem, digite [code];
Cole o texto copiado do TXT
Feche a postagem com /code entre colchetes [].
Sds. Feliz

 
Postagens: 1705 | Localização: Belo Horizonte | Registrado: 22 November 2002Reply With QuoteReport This Post
Programador Pleno

postado Hide Post
DT -LOTE- LACMTO CONTRA -------------HISTORICO/COMPLEMENTO------------- --DEBITOS-- --CREDITOS- ----SALDO---
20    607   1169   8044 VLR REF 40 BOLSAS                                      8,00                36.607,76 D
20    607   1178    353 VLR REF VALES NEIVA BUDDE                                        260,58    36.347,18 D
20    607   1180   7030 VLR REF VENDAS 20/06                               3.790,19                40.137,37 D
20    607   1182    175 CFE CP N 380 - DUPLICATAS                          5.000,00                45.137,37 D
20    607   1192    175 CFE DB BESC                                                    5.675,77    39.461,60 D
20   3574      1    337 CFE DOCUMENTO NUM/SER: 105 8   NOME: 905774 MAR      138,69                39.600,29 D
                        ILDA SALETE GAMBATTO                           
20   3574      2    337 CFE DOCUMENTO NUM/SER: 172 4   NOME: 905614 TRA       76,78                39.677,07 D
                        NSPORTES BERGERS LTDA ME                       
20   3574      3    337 CFE DOCUMENTO NUM/SER: 228 3   NOME: 905607 IVE      140,00                39.817,07 D
                        TE MARIA MAZZUCCO     


Beleza Renato, ai esta o txt


Att
Elizeu
elizeudefarias@hotmail.com
 
Postagens: 294 | Registrado: 24 June 2004Reply With QuoteReport This Post
Gerente

Figura de  OsmarJr
postado Hide Post
Tente algo mais ou menos assim:
Public Sub Importa()
'---------------------------------------------------------------------------------------
' Procedimento : Importa
' Data/Hora    : 22/06/07 16:10
' Autor        : OsmarJr
' Propósito    : Importa dados de arquivo texto com formatos diferentes em linhas
'---------------------------------------------------------------------------------------
'
On Error GoTo Importa_Erro

Dim strL As String
Dim varT As Variant

    Open "Teste.txt" For Input As #1
    Do While Not EOF(1)
        Line Input #1, strL
        If Left(strL, 2) <> "DT" Then ' Testa a primeira linha da sua ´página` e ignora
            varT = Left(strL, 2)
            If IsNumeric(varT) Then ' As duas primeiras posições formam um número
                RS.DT = Left(strL, 2)
                RS.Lote = CLng(Trim(Mid(strL, 3, 6)))
                RS.Lancto = CLng(Trim(Mid(strL, 10, 7)))
                RS.Contra = CLng(Trim(Mid(strL, 17, 8)))
                RS.Historico = Trim(Mid(strL, 25, 47))
                RS.Debitos = CCur(Trim(Mid(strL, 73, 11)))
                RS.Creditos = CCur(Trim(Mid(strL, 84, 12)))
                RS.Saldo = CCur(Trim(Mid(strL, 97, 13)))
                RS.DC = Right(strL, 1)
            Else
                RS.Historico = RS.Historico & Trim(strL) ' Talvez seja necessário dar um trato aqui
            End If
            '--------------------------------------------
            ' Insira aqui seu tratamento para gravação
            '--------------------------------------------
        End If
    Loop
Saida:
    Exit Sub
Importa_Erro:
    MsgBox "Erro: " & vbCrLf & vbCrLf & Err.Description & vbCrLf & _
        " no procedimento Importa", vbExclamation + vbOKOnly, _
        "Erro: " & CStr(Err.Number)
#If DESENV Then
    Stop
    Resume
#End If
    Resume Saida
End Sub


========================================================
O maior prazer de um homem inteligente é bancar o idiota diante de um idiota que banca o inteligente.

Exemplos - Esnips
Grupo DicasAccess
 
Postagens: 3354 | Localização: Curitiba - PR | Registrado: 08 March 2001Reply With QuoteReport This Post
Programador Pleno

postado Hide Post
Grande Osmar

Vou adaptar a sua dica e rotorno assim que for possivel


Att
Elizeu
elizeudefarias@hotmail.com
 
Postagens: 294 | Registrado: 24 June 2004Reply With QuoteReport This Post
Programador Pleno

postado Hide Post
Esta dando erro 13
Tipos incompativeis no procedimento importa

 

Public Sub Importa()
'---------------------------------------------------------------------------------------
' Procedimento : Importa
' Data/Hora    : 22/06/07 16:10
' Autor        : OsmarJr
' Propósito    : Importa dados de arquivo texto com formatos diferentes em linhas
'---------------------------------------------------------------------------------------
'
On Error GoTo Importa_Erro

Dim db As DAO.Database
Dim rs As DAO.Recordset

Dim strL As String
Dim varT As Variant

Dim strDT As String
Dim intLote As Integer
Dim intLancamento As Integer
Dim intConta As Integer
Dim strHistorico As String
Dim curDebitos As Currency
Dim curCreditos As Currency
Dim curSaldo As Currency
Dim strDC As String

Set db = CurrentDb()
Set rs = db.OpenRecordset("_Tab_ImportaCaixa")

    Open "C:\SysmoVS\arquivo.txt" For Input As #1
    Do While Not EOF(1)
        Line Input #1, strL
        If Left(strL, 2) <> "DT" Then ' Testa a primeira linha da sua ´página` e ignora
            varT = Left(strL, 2)
            If IsNumeric(varT) Then ' As duas primeiras posições formam um número
                strDT = Left(strL, 2)
                intLote = CLng(Trim(Mid(strL, 3, 6)))
                intLancamento = CLng(Trim(Mid(strL, 10, 7)))
                intConta = CLng(Trim(Mid(strL, 17, 8)))
                strHistorico = Trim(Mid(strL, 25, 47))
                curDebitos = CCur(Trim(Mid(strL, 73, 11)))
                curCreditos = CCur(Trim(Mid(strL, 84, 12)))
                curSaldo = CCur(Trim(Mid(strL, 97, 13)))
                strDC = Right(strL, 1)
            Else
                strHistorico = strHistorico & Trim(strL) ' Talvez seja necessário dar um trato aqui
            End If
            
            rs.AddNew
            rs!DT = strDT
            rs!Lote = intLote
            rs!Lancamento = intLancamento
            rs!conta = intConta
            rs!Historico = strHistorico
            rs!Debitos = curDebitos
            rs!creditos = curCreditos
            rs!saldo = curSaldo
            rs!DC = strDC
            rs.Update
        End If
    Loop
    
    Set rs = Nothing
    Set db = Nothing
    
Saida:
    Exit Sub
Importa_Erro:
    MsgBox "Erro: " & vbCrLf & vbCrLf & Err.Description & vbCrLf & _
        " no procedimento Importa", vbExclamation + vbOKOnly, _
        "Erro: " & CStr(Err.Number)
#If DESENV Then
    Stop
    Resume
#End If
    Resume Saida
End Sub





Att
Elizeu
elizeudefarias@hotmail.com
 
Postagens: 294 | Registrado: 24 June 2004Reply With QuoteReport This Post
Analista Sênior

Figura de  Renato Santos
postado Hide Post

Elizeu,

Tente o procedimento abaixo.
Considerei que os campos da tabela _Tab_ImportaCaixa possuem a mesma ordem do Arquivo.TXT.
Sds. Feliz

Sub Importa()
    Dim strL As String, varDados(8)
    Dim bytI As Byte, bytL As Byte

    Set rs = CurrentDb.OpenRecordset("_Tab_ImportaCaixa")
    Open "C:\SysmoVS\arquivo.txt" For Input As #1

    While Not EOF(1)
        Line Input #1, strL
        If Left(strL, 2) <> "DT" Then
            If Len(Trim(Left(strL, 2))) = 0 Then
                varDados(4) = varDados(4) & Trim(Mid(strL, 25, 47))
            Else
                If Len(varDados(0)) > 0 Then
                    rs.AddNew
                    For i = 0 To 8
                        If Len(varDados(i)) > 0 Then
                            rs(i) = varDados(i)
                        End If
                    Next
                    rs.Update
                    Erase varDados()
                End If
                bytI = 1
                For i = 0 To 8
                    bytL = Choose(i + 1, 2, 7, 7, 8, 48, 11, 12, 13, 2)
                    varDados(i) = Trim(Mid(strL, bytI, bytL))
                    bytI = bytI + bytL
                Next
            End If
        End If
    Wend

    rs.AddNew
    For i = 0 To 8
        If Len(varDados(i)) > 0 Then
            rs(i) = varDados(i)
        End If
    Next
    rs.Update

    Close #1
    Set rs = Nothing

End Sub
 
Postagens: 1705 | Localização: Belo Horizonte | Registrado: 22 November 2002Reply With QuoteReport This Post
Programador Pleno

postado Hide Post
Bom dia RenatoSantos, Elcio e Osmar

Muito obrigado pela colaboração de todos

Utilizei a solução do Renato Santos que funcionou perfeitamente

Um abraço a todos


Att
Elizeu
elizeudefarias@hotmail.com
 
Postagens: 294 | Registrado: 24 June 2004Reply With QuoteReport This Post
Analista Sênior

Figura de  Renato Santos
postado Hide Post

Elizeu,

Fico feliz que tenha ajudado.
Abraços. Feliz

 
Postagens: 1705 | Localização: Belo Horizonte | Registrado: 22 November 2002Reply With QuoteReport This Post
  Powered by Social Strata  
 

GD Access    GD Access    Grupo de Discussão  Ir para Categorias  Grupos técnicos  Ir para Fóruns  Access    Importar txt

©