LEITURA DE ARQUIVO TXT COMPLEXA

LUIS.FLAVIO 03/03/2010 20:37:17
#335972
Sim, mas esse é fácil de pegar porque sempre esse valor vai estar nesse lugar, nunca vai mudar!
RODRIGOFERRO 03/03/2010 21:58:51
#335974
Amigo trabalho diretamento com Exportações/Importações, Exporta em CSV com Delimitador no caso a virgula..

POste o arquivo ai que posso ajudar... abraços
LUIS.FLAVIO 04/03/2010 20:58:39
#336106
Amigos depois de muito tentar, tentar, programar, programar, pensar, pensar, lutar, lutar e quase desisti!

Consegui fazer da seguinte forma, irei postar para estudo e para até ajudar a melhor o código e talvez posteriormente terei que fazer outro código para ler com delimitadores:

[txt-size=5]
Private Sub updateAnalisys()

Dim strLinha As String
Dim lineCurrent As Integer
Dim strSampleName As String

Dim strSQL As String
Dim intContador As Integer
Dim elements() As Variant
Dim colunasElementos() As Variant

F = FreeFile

lineCurrent = 0

abreConexaoBanco

Open [Ô]G:\VM\D\Teclink\RaioX1.txt[Ô] For Input As F [ô] Abre o arquivo a ser importado

Do While Not EOF(F)
Line Input #F, strLinha

lineCurrent = lineCurrent + 1 [ô]Saber em qual linha está o LOOP

If lineCurrent = 8 Then [ô]Verifica se chegou para linha 8 para verificar qual a posição de cada elemento

elements = Array([Ô]Zn[Ô], [Ô]Fe[Ô], [Ô]Al2o3[Ô], [Ô]CaO[Ô], [Ô]MgO[Ô], [Ô]SiO2[Ô], [Ô]Pb[Ô], [Ô]S [Ô], [Ô]Au[Ô], [Ô]Ag[Ô]) [ô]Elementos que deverão ser buscado no arquivo

ReDim colunasElementos(UBound(elements)) [ô]Redimenciona o array que guarda as posições de cada elemento para o quantidade de elementos que está pesquisando

For intContador = 0 To UBound(elements) [ô]Começa o FOR para localizar e guardar dentro do array qual a posição de cada elemento dentro do arquivo

Dim varColuna As Integer

varColuna = InStr(1, strLinha, elements(intContador), vbTextCompare) [ô]Armazena na variável a localização do elemento atual

If varColuna <> 0 Then [ô]Verifica se elemento foi encontrado, caso não seja ele joga vazio para o elemento não encontrado
colunasElementos(intContador) = varColuna
Else
colunasElementos(intContador) = Empty
End If

Next

End If

If lineCurrent >= 12 Then [ô] Verifica se a linha atual é a linha 12, pois é a partir dela que contém os resultados químicos

strSampleName = Trim(Mid(strLinha, 5, 18)) [ô]Pega o nome da amostra

Set rs = Con.Execute([Ô]SELECT SampleName FROM Results WHERE SampleName = [ô][Ô] & strSampleName & [Ô][ô][Ô]) [ô]Faz uma consulta no banco de dados para verificar se a amostra existe

If rs.EOF = False Then [ô]Caso a amostra exista começa o processo de criação da instrução SQL para atualizar os resultados químicos

strSQL = [Ô]UPDATE Results SET [Ô]

For intContador = 0 To UBound(colunasElementos)

If colunasElementos(intContador) <> Empty Then [ô]Verifica dentro do array que armazena as posições do elementos se não existe algum elemento que não foi encontrado

Dim resultadoAnalise

resultadoAnalise = Trim(Mid(strLinha, colunasElementos(intContador), 5)) [ô]Armazena na variável o resultado químico do elemento atual

If resultadoAnalise = Empty Then [ô]Caso o resultado químico esteja limpo/vazio, colocamos como o resultadoAnalise como NULO
resultadoAnalise = [Ô]Null[Ô]
End If

strSQL = strSQL & Trim(elements(intContador)) & [Ô]=[Ô] & resultadoAnalise & [Ô],[Ô] [ô]Amazena na instruação SQL os elementos e resultados encontrados no arquivo

End If

Next

strSQL = Left(strSQL, Len(strSQL) - 1) & [Ô] WHERE SampleName = [ô][Ô] & strSampleName & [Ô][ô][Ô] [ô]Termino da construção SQL

Con.Execute strSQL [ô]Atualiza os resultados das amostras no banco de dados

End If

End If

Loop

Close #F

End Sub

[/txt-size]
DAVERSON 04/03/2010 21:07:09
#336111
vc vai fazer um programa pra ler sempre o mesmo arquivo??

Open [Ô]G:\VM\D\Teclink\RaioX1.txt[Ô] For Input As F [ô] Abre o arquivo a ser importado

pq vc nao usou o codigo que te passei onde vc tem um campo e usando o componente driverlistbox vc acharia seu txt... na verdade qualquer txt...

If Len(Me.txtNomeArq & vbNullString) = 0 Then [ô] Testa se txtNomeArq contém alguma coisa
MsgBox [Ô]Informe o nome do arquivo a ser importado[Ô], vbExclamation + vbOKOnly, [Ô]Vazio[Ô]
Me.txtNomeArq.SetFocus
Exit Sub
End If
If Len(Dir(Me.txtNomeArq)) = 0 Then [ô] Testa a existência do arquivo
MsgBox [Ô]O arquivo não existe!!![Ô], vbCritical + vbOKOnly, [Ô]Erro[Ô]
Me.txtNomeArq.SetFocus
Exit Sub
End If

claro que com um bom tratamento logo seria o ideal.
LUIS.FLAVIO 04/03/2010 21:14:27
#336116
DAVERSON o diretório e o arquivo é fixo, pra você entender ele é gerado por equipamento de analise química, meu sistema irá verificar se esse arquivo existe a cada 10 minutos para poder lançar esses informações no banco de dados.

Apesar que todo a idéia foi tirada do seu código, não posso utilizar porque as posições dos meus campos não são fixas, e os elementos mudam a cada análise, tenho que parametrizar mais o sistema, então preciso achar a posição de cada elemento para depois pegar o valor correspondente de cada elemento, se fosse fixo poderia usar sem problema
LUIS.FLAVIO 04/03/2010 21:18:36
#336118
é tratado em outro procedimento a existência desse arquivo!
DAVERSON 04/03/2010 21:41:34
#336124
entao morreu o assunto... so falta fechar o topico.

Abraço
Página 2 de 2 [17 registro(s)]
Tópico encerrado , respostas não são mais permitidas