LEITURA DE ARQUIVO TXT COMPLEXA
Sim, mas esse é fácil de pegar porque sempre esse valor vai estar nesse lugar, nunca vai mudar!
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
POste o arquivo ai que posso ajudar... abraços
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]
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]
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.
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.
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
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
é tratado em outro procedimento a existência desse arquivo!
entao morreu o assunto... so falta fechar o topico.
Abraço
Abraço
Tópico encerrado , respostas não são mais permitidas