IMPORTAR ARQUIVO TXT SEM FORMACAO
Boa tarde,
Preciso da ajuda dos amigos do VBMANIA,
Hoje estou com arquivo extraido do sistema da empresa, que muda o layout, ou seja os campos aparecem conforme são usados, sendo assim inicio o mês com 10 colunas e termino com 15 [Ô]Exemplo[Ô].
Ele é delimitado por ponto e virgula.
Aguem sabe como automatizar esta importação, ja procurei em varios foruns e todos eles usam a posição da coluna.
Preciso da ajuda dos amigos do VBMANIA,
Hoje estou com arquivo extraido do sistema da empresa, que muda o layout, ou seja os campos aparecem conforme são usados, sendo assim inicio o mês com 10 colunas e termino com 15 [Ô]Exemplo[Ô].
Ele é delimitado por ponto e virgula.
Aguem sabe como automatizar esta importação, ja procurei em varios foruns e todos eles usam a posição da coluna.
Bom dia,
Você poderia capturar linha a linha do arquivo em um vetor ex Linha(0),Linha(1), e depois você utilizaria o split para dividir em outro vetor pelo delimitador [Ô];[Ô]
Dividido = split(linha(i),[Ô];[Ô])
Espero poder ter ajudado,
Abraços
Você poderia capturar linha a linha do arquivo em um vetor ex Linha(0),Linha(1), e depois você utilizaria o split para dividir em outro vetor pelo delimitador [Ô];[Ô]
Dividido = split(linha(i),[Ô];[Ô])
Espero poder ter ajudado,
Abraços
Olá Alemão, desculpa cara, não entendi mesmo, você pode me ajudar um pouco mas.
Open [Ô]C:\pasta\arquivo.txt[Ô] for input as #1
dim conteudo as string
dim splitado
dim campo1 as string
dim campo2 as string
do while not eof(1)
line input #1, conteudo
splitado = split(conteudo, [Ô];[Ô])
campo1 = splitado(0)
campo2 = splitado(1)
loop
close #1
dim conteudo as string
dim splitado
dim campo1 as string
dim campo2 as string
do while not eof(1)
line input #1, conteudo
splitado = split(conteudo, [Ô];[Ô])
campo1 = splitado(0)
campo2 = splitado(1)
loop
close #1
Entendi, o único problema é que infelizmente não tenho a mesma quantidade de campos, em todos os arquivo a serem importados.
i = FREEFILE
OPEN (ARQUIVO.TXT) FOR INPUT AS #i
DO UNTIL EOF(i)
LINE INPUT #i, linha
[ô]aqui é montada a array campos onde cada elemento do array é um campo
campos = SPLIT(linha,[Ô];[Ô])
LOOP
CLOSE #i
Hoje uso o script abaixo para importar um arquivo com largura fixa.
Não entendi como consigo incluir o exemplo a partir da 5ª linha
Private Sub CMD_Import_Click()
Dim db As Database
Dim rst As Recordset
Dim i As Integer
Dim a As Double
Dim Linha As String
Set db = CurrentDb
Set rst = db.OpenRecordset([Ô]Nome_tabela[Ô])
i = FreeFile
Open [Ô]c:\arquivo.txt[Ô] For Input As i
Loop
Close #i
a = 1
Do While Not EOF(i)
Line Input #i, Linha
TXTRegistros.Visible = True
TXTRegistros.Caption = [Ô]Registro: [Ô] & a
DoEvents
rst.AddNew
rst([Ô]Campo1[Ô]) = Left(Linha, 2)
rst([Ô]Campo2[Ô]) = Mid(Linha, 3, 3)
rst([Ô]Campo3[Ô]) = Mid(Linha, 6, 4)
rst([Ô]Campo4[Ô]) = Mid(Linha, 10, 20)
rst.Update
a = a + 1
Loop
TXTRegistros.Visible = False
Exit Sub
Trataerro:
If Err = 3010 Then
db.TableDefs.Delete [Ô]TesteS[Ô]
Resume
Else
MsgBox Err
End If
End Sub
Desculpe pela minha ignorância no entendimento
Não entendi como consigo incluir o exemplo a partir da 5ª linha
Private Sub CMD_Import_Click()
Dim db As Database
Dim rst As Recordset
Dim i As Integer
Dim a As Double
Dim Linha As String
Set db = CurrentDb
Set rst = db.OpenRecordset([Ô]Nome_tabela[Ô])
i = FreeFile
Open [Ô]c:\arquivo.txt[Ô] For Input As i
Loop
Close #i
a = 1
Do While Not EOF(i)
Line Input #i, Linha
TXTRegistros.Visible = True
TXTRegistros.Caption = [Ô]Registro: [Ô] & a
DoEvents
rst.AddNew
rst([Ô]Campo1[Ô]) = Left(Linha, 2)
rst([Ô]Campo2[Ô]) = Mid(Linha, 3, 3)
rst([Ô]Campo3[Ô]) = Mid(Linha, 6, 4)
rst([Ô]Campo4[Ô]) = Mid(Linha, 10, 20)
rst.Update
a = a + 1
Loop
TXTRegistros.Visible = False
Exit Sub
Trataerro:
If Err = 3010 Then
db.TableDefs.Delete [Ô]TesteS[Ô]
Resume
Else
MsgBox Err
End If
End Sub
Desculpe pela minha ignorância no entendimento
A função Split, transforma uma string em um array, separando cada Ãtem do array de acordo com o caracter passado como divisor. Vc não a está usando no seu código.
tem como vc postar um exemplo de como recebe este arquivo e como gostaria que ficasse.
Private Sub CMD_Import_Click()
Dim db As Database
Dim rst As Recordset
Dim i As Integer
Dim a As Double
Dim Linha As String
Set db = CurrentDb
Set rst = db.OpenRecordset([Ô]Nome_tabela[Ô])
a = 0
i = FreeFile
Open [Ô]c:\arquivo.txt[Ô] For Input As #i
Do until eof(i)
a=a+1
TXTRegistros.Visible = True
TXTRegistros.Caption = [Ô]Registro: [Ô] & a
DoEvents
Line Input #i, Linha
campos = SPLIT(linha,[Ô];[Ô])
IF Ubound(campos) > 0 then
rst.AddNew
rst([Ô]Campo1[Ô]) = campos(0)
if Ubound(campos) >= 2 then rst([Ô]Campo2[Ô]) = campos(1)
if Ubound(campos) >= 3 then rst([Ô]Campo3[Ô]) = campos(2)
if Ubound(campos) >= 4 then rst([Ô]Campo4[Ô]) = campos(3)
rst.Update
endif
Loop
Close #i
End Sub
Dim db As Database
Dim rst As Recordset
Dim i As Integer
Dim a As Double
Dim Linha As String
Set db = CurrentDb
Set rst = db.OpenRecordset([Ô]Nome_tabela[Ô])
a = 0
i = FreeFile
Open [Ô]c:\arquivo.txt[Ô] For Input As #i
Do until eof(i)
a=a+1
TXTRegistros.Visible = True
TXTRegistros.Caption = [Ô]Registro: [Ô] & a
DoEvents
Line Input #i, Linha
campos = SPLIT(linha,[Ô];[Ô])
IF Ubound(campos) > 0 then
rst.AddNew
rst([Ô]Campo1[Ô]) = campos(0)
if Ubound(campos) >= 2 then rst([Ô]Campo2[Ô]) = campos(1)
if Ubound(campos) >= 3 then rst([Ô]Campo3[Ô]) = campos(2)
if Ubound(campos) >= 4 then rst([Ô]Campo4[Ô]) = campos(3)
rst.Update
endif
Loop
Close #i
End Sub
caro FEDERHEN, creio que o seu código vai me ajudar, vou fazer os teste assim que tiver uma resposta aviso os nossos amigos.
Agradeço muito a ajuda de todos.
Agradeço muito a ajuda de todos.
Tópico encerrado , respostas não são mais permitidas