IMPORTAR ARQUIVO TXT SEM FORMACAO

AIRINEU1 04/10/2011 15:27:28
#385948
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.
MORDENTI 04/10/2011 16:01:37
#385950
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
AIRINEU1 04/10/2011 16:09:55
#385951
Olá Alemão, desculpa cara, não entendi mesmo, você pode me ajudar um pouco mas.
KERPLUNK 04/10/2011 16:18:45
#385955
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
AIRINEU1 04/10/2011 16:21:05
#385956
Entendi, o único problema é que infelizmente não tenho a mesma quantidade de campos, em todos os arquivo a serem importados.
FEDERHEN 04/10/2011 16:21:19
#385958

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

AIRINEU1 04/10/2011 17:21:52
#385964
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
KERPLUNK 04/10/2011 17:36:02
#385967
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.
MARCELO.TREZE 05/10/2011 09:39:48
#385999
tem como vc postar um exemplo de como recebe este arquivo e como gostaria que ficasse.
FEDERHEN 05/10/2011 11:43:11
#386008
Resposta escolhida
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
AIRINEU1 07/10/2011 14:52:16
#386245
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.
Tópico encerrado , respostas não são mais permitidas