USUÁRIO:      SENHA:        SALVAR LOGIN ?    Adicione o VBWEB na sua lista de favoritos   Fale conosco 

 

  Fórum

  Visual Basic
Voltar
Autor Assunto:  Importar arquivo Texto para tabela
WET
TABOÃO DA SERRA
SP - BRASIL
Postada em 21/03/2012 09:53 hs         
Olá amigos bom dia.
Preciso de um help.
Na verdade, precisaria de um arquivo texto colocar em um excel.
Então, achei melhor jogar em uma tabela MDB para facilitar os calculos que deverão ir para o excel.
Só que o texto não delimitado por espaços ou vigulas, é uma cópia dos recibos da empresa. Desta forma precisarei achar os campos dentro do texto, então gostaria de ler linha a linha.
Fiz o seguinte comando.:

Private Sub Command1_Click()
    Dim s As String
    Dim f As Integer
    
    f = FreeFile 'Pega o numero do arquivo a ser aberto caso tenha mais de um arquivo aberto.
    
    Open Text1.Text For Input As #f  ' abre o arquivo
    
    Text1.Text = ""
    
    Do Until EOF(f)
    
    Line Input #f, s
    Text2.Text = Text1.Text + s
    
    
    Loop
    
        
        
    Close #f ' fecha o arquivo
        
    'ls_Grava
        
End Sub

Mas ele traz como se fosse apenas uma linha, abri o arquivo em um editor de texto Editplus e nele aparece várias linha com a quebra de linha com o chr(13) Enter, o VB esta entendendo apenas uma linha. Desta forma fica complicado pegar o que preciso.
Veja parte do arquivo como aparece.


-------------+
| Folha de Pagamento                                                                                    03/02/2012 11:58:15  |
| Apelido:  02             Razao Social:  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX                                           Pag:1|
|----------------------------------------------------------------------------------------------------------------------------|
| C.N.P.J./CEI:XXXXXXXXXXXXXXXXXX             Inscricao: xxxxxxxxxxxxxxxxxxxxxxxx         Periodo de: 01/01/2012 a 31/01/2012|
| Endereco:xxxxxxxxxxxxxxxxxx                                  Bairro:xxxxxxxxxxxxxxxxxx Cidade:xxxxxxxxxxxxxxxx      UF: SP |
+----------------------------------------------------------------------------------------------------------------------------+
+----------------------------------------------------------------------------------------------------------------------------+
|                                                     Setor: 9 - RETIFICA                                                    |
+----------------------------------------------------------------------------------------------------------------------------+


Neste excemplo preciso pegar apenas o Setor e colocar 9 na minha tabela, e ai por diante.

Alguem poderia me ajudar?

Obrigado.
     
zeuzebio
CRICIÚMA
SC - BRASIL
Postada em 21/03/2012 10:17 hs         
Amigo,

O erro não é do VB.

você fez a seguinte linha:
Text2.Text = Text1.Text + s

Observe que nas propriedades de Text2, deve-se colocar a propiredade MultiLine configurada como True, senão fica uma linha apenas. Confira se está True a propriedade MultiLine de Text2.

Também convém colocar o caracter de retorno no final da instrução, ficando da seguinte forma:

Text2.Text = Text1.Text + s + VBKeyReturn

Tente e, caso não consiga, volte a postar que a gente encontra a solução.

Abraços.
     
WET
TABOÃO DA SERRA
SP - BRASIL
Postada em 21/03/2012 10:22 hs         
Olá Zeuzebio.
Em primeiro lugar, obrigado pela resposta.
No text2 eu coloquei multline, quando digo apresenta uma só linha é que laço ele passa apenas uma vez, desta forma fica dificil pegar os campos desejado.
Coloquei a instrução que mandou e me apareceu a seguinte mensagem.

Type mismatch

Obrigado.
     
Tiranossauro
não registrado
Postada em 21/03/2012 11:59 hs   
Do Until EOF(f)
    
    Line Input #f, s
    Text2.Text = Text1.Text & replace(s, vbcrlf, " ")
    
    
    Loop
     
WET
TABOÃO DA SERRA
SP - BRASIL
Postada em 21/03/2012 12:24 hs         
Amigos, não sei se expressei corretamente.

Tiranossauro, a solução que apresentou, não deu erro, mas continua passando apenas uma vez no laço e retornando no text2 o texto completo, preciso que ele monte linha a linha.
linha 1 = +----------------------------------------------------------------------------------------------+
linha 2 = | Folha de Pagamento                                                        03/02/2012 11:58:15  |
linha 3 = +----------------------------------------------------------------------------------------------+
linha 4 = |                                          Setor: 9 - RETIFICA                                                |

E desta forma eu possa quando no laço passar a linha 4 eu pegar na posição logo após a palavra Setor, pegue o numero 9 e grave na tabela mdb, e assim por diante.

Mas, obrigado a todos que já responderam e que possam ainda me ajudar.

     
Treze
Pontos: 2843 Pontos: 2843
SÃO VICENTE
SP - BRASIL
Postada em 21/03/2012 14:28 hs            
Bom vou tentar explicar o vb não entende como apenas uma linha, é que vc exibe apenas uma linha.

substitua o TextBox Por u listbox e veja o resultado

Private Sub Command1_Click()
    Dim s As String
    Dim f As Integer
    Dim Linhas() As String
        f = FreeFile 'Pega o numero do arquivo a ser aberto caso tenha mais de um arquivo aberto.
        Open Text1.Text For Input As #f  ' abre o arquivo
        Text1.Text = ""
        Do Until EOF(f)
        Line Input #f, s
        Linhas = Split(s, vbCrLf)
For F = 0 To UBound(Linhas)
   List1.AddItem Linhas(f)
Nextf
        Loop
        Close #f ' fecha o arquivo
        'ls_Grava
End Sub

não sei como vai aparecer mas teste e diga como ficou outra maneira seria usar o richtextbox.

porque disto? porque o loop só vai apresentar a ultima linha, ou seja ele coloca a primeira linha no textbox, porém em seguida substitui esta pela segunda linha e assim sucessivamente até a ultima linha.

TÓPICO EDITADO
   
Página(s): 1/3      PRÓXIMA »


Seu Nome:

Seu eMail:

ALTERAR PARA MODO HTML
Mensagem:

[:)] = 
[:P] = 
[:(] = 
[;)] = 

HTML DESLIGADO

     
 VOLTAR

  



CyberWEB Network Ltda.    © Copyright 2000-2024   -   Todos os direitos reservados.
Powered by HostingZone - A melhor hospedagem para seu site
Topo da página