Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Lucas_Dragon

[Resolvido] Leitura txt e grava no banco

Recommended Posts

Boa noite pessoal.

 

Estou com um problema para solucionar meio que cabeludo, mas acho que vai ser interessante.

Seguinte estou com o seguinte TXT:

 

 

ARQUIVO TESTE - CONTROLE DE ESTOQUE

Códig Descrição								 Fornecedor Preferencial					  Grupo					MED	  Preço em R$	  SUBGRUPO			 
-------------------------------------------------------------------------------------------------------------------------------------------------------------
00001 PRODUTO 1							  FORNECEDOR 1								RESINA				   PC		  154,00			  A
00002 PRODUTO 2							  FORNECEDOR 2								ADESIVO				PC		  140,00			  B	
00003 PRODUTO 3							  FORNECEDOR 3								ADESIVO				FC		   128,00			  A	
00004 PRODUTO 4							  FORNECEDOR 1								PORCELANA			PC		   154,00			  C

(acho que a tebela vai perder a formatação, mas vai dar pra entender)

 

Tenho um banco com as colunas CODIGO | DESCRIÇÃO | FORNECEDOR | GRUPO | MED | PRECO | SUBGRUPO

 

sei que tenho que fazer um Array para guardar as informações lidas de cada linha e MOD para dizer o tamanho de cada campo para q eu possa pegar as informações corretas.

Var1 = vale da coluna 1 até a 5 usando MOD, mas não estou conseguindo fazer... a lógica eu sei, mas estou com problema para implementa-la...

 

Algum amigo poderia ajudar?

 

Grato.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caso os espaçamentos sejam padrão de linha para linha você pode usar a função MID para dividir cada trecho da linha.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caso os espaçamentos sejam padrão de linha para linha você pode usar a função MID para dividir cada trecho da linha.

Os espaçamentos são padrões, agora não me recordo o tamanho dos campos, mas por exemplo o campo codigo são 5 caracteres, campo Descrição são 20 é padrão de todas as linhas.

 

Como eu poderia usar mid? tem alguma rotina q faça isso? Eu fiz uma rotina abaixo:

 

strText = objFile.readLine

Dim Array

Array = Split(strText,";")

For intD = 0 To Ubound(Array)

if intD = 0 then nome = capitalize(trim(Array(IntD)))

if intD = 1 then email = lcase(trim(Array(IntD)))

next

 

Mas essa rotina le até ";" no caso tenho q usar MID como você disse para determinar os campos e jogar nas variaveis, tipo:

VARCODIGO = MID(COLUNA 1 ATÉ 5)

 

esse é o problema q estou encontrando.

 

Saberia me dar uma mão nisso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como já está lendo linha a linha você divide cada trecho usando o MID. Dê uma olhada nesse link para a sintaxe da função MID.

 

Não precisa usar SPLIT nesse caso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como já está lendo linha a linha você divide cada trecho usando o MID. Dê uma olhada nesse link para a sintaxe da função MID.

 

Não precisa usar SPLIT nesse caso.

Belezaaaaa.. consegui buscar o valor fazendo

prod_codigo = MID(strText, 1, 5)
prod_nome = MID(strText, 5, 20)

por exemplo...

 

 

strText = objFile.readLine

prod_codigo = MID(strText, 1, 5)
prod_nome = MID(strText, 5, 20)

CriarRecordset rs
rs.open "SELECT prod_nome, prod_codigo FROM produtos1", Conn, 1, 1
Conn.execute "insert into produtos1 (prod_codigo, prod_nome) values ('" & prod_codigo & "','" & prod_nome & "')"

consegui salvar no banco.. perfeitamente...

 

Como eu jogo um array ai para fazer um loop para ele buscar todos os valores em todas as linhas? e outra dúvida, como faço para a leitura começar apartir da linha 6 por exemplo?

 

Alguem tem essa solução?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você deverá colocar um laço de repetição, while/wend de preferencia, varrendo todo o "stream" do arquivo txt. Poste como está seu código para verificarmos as alterações necessárias.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você deverá colocar um laço de repetição, while/wend de preferencia, varrendo todo o "stream" do arquivo txt. Poste como está seu código para verificarmos as alterações necessárias.

Segue código abaixo

 

Public Function capitalize(ByVal p_strEntrada)
Dim arrAux
Dim strSaida
Dim i
If Not(IsNull(p_strEntrada) OR p_strEntrada = "") Then
	p_strEntrada = LCase(p_strEntrada)
	arrAux = Split(p_strEntrada)
	For i=0 To UBound(arrAux)
		strSaida = strSaida & UCase(Left(arrAux(i),1)) & Mid(arrAux(i),2) & " "
	Next
	strSaida = Trim(strSaida)
End If
capitalize = strSaida
End Function 

		arquivo = Campo_Form("arquivo")
		if arquivo = "" then response.redirect "upprodutos1.asp"
		dim caminho
		dim fs
		Set fs = Server.CreateObject("Scripting.FileSystemObject")
		caminho = Server.MapPath(arquivo)
		'Verificando se o arquivo existe
		'Response.Write fs.FileExists(caminho)
		'Abre o arquivo 
		Set objFile = fs.OpenTextFile(caminho)
		'Enquanto o arquivo CSV nao termina 
		Do While Not objFile.AtEndOfStream 
		'Armarena uma linha do CSV 
		strText = objFile.readLine

			
			prod_codigo = MID(strText, 1, 5)
			prod_nome = MID(strText, 5, 20)
					
			
		Loop
		
		Set objFile = nothing
		if fs.FileExists(caminho) then
			fs.DeleteFile(caminho)
		end if
		Set fs = nothing
	
	CriarRecordset rs
	rs.open "SELECT prod_nome, prod_codigo FROM produtos1", Conn, 1, 1
		Conn.execute "insert into produtos1 (prod_codigo, prod_nome) values ('" & prod_codigo & "','" & prod_nome & "')"
		rs.movenext
	FecharRecordset rs
	Conn.execute "delete from produtos"
	FecharBD Conn

	response.redirect "upprodutos1.asp"

%>

Muito grato pela ajuda

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz uma adaptação e marquei algumas coisas como comentário.

Testa e veja se funcionou:

Public Function capitalize(ByVal p_strEntrada)
Dim arrAux
Dim strSaida
Dim i
If Not(IsNull(p_strEntrada) OR p_strEntrada = "") Then
	p_strEntrada = LCase(p_strEntrada)
	arrAux = Split(p_strEntrada)
	For i=0 To UBound(arrAux)
		strSaida = strSaida & UCase(Left(arrAux(i),1)) & Mid(arrAux(i),2) & " "
	Next
	strSaida = Trim(strSaida)
End If
capitalize = strSaida
End Function 

arquivo = Campo_Form("arquivo")
if arquivo = "" then response.redirect "upprodutos1.asp"
dim caminho
dim fs
Set fs = Server.CreateObject("Scripting.FileSystemObject")
caminho = Server.MapPath(arquivo)
'	Verificando se o arquivo existe
If fs.FileExists(caminho) Then
'		Abre o arquivo 
	Set objFile = fs.OpenTextFile(caminho)

'		Enquanto o arquivo CSV nao termina 
	While Not objFile.AtEndOfStream 
'			Armazena uma linha do CSV 
		strText = objFile.readLine

		prod_codigo = MID(strText, 1, 5)
		prod_nome = MID(strText, 5, 20)
'			Aqui, levando em consideração que o objeto de conexão já foi criado, iremos inserir os dados linha a linha.
		Conn.execute "insert into produtos1 (prod_codigo, prod_nome) values ('" & prod_codigo & "','" & prod_nome & "')"

	Wend

	Set objFile = nothing
	fs.DeleteFile(caminho)
end if
Set fs = nothing

'	CriarRecordset rs
'	rs.open "SELECT prod_nome, prod_codigo FROM produtos1", Conn, 1, 1
'		Conn.execute "insert into produtos1 (prod_codigo, prod_nome) values ('" & prod_codigo & "','" & prod_nome & "')"
'		rs.movenext
'	FecharRecordset rs
'	Conn.execute "delete from produtos"
'	FecharBD Conn

response.redirect "upprodutos1.asp"

%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz uma adaptação e marquei algumas coisas como comentário.

Testa e veja se funcionou:

Public Function capitalize(ByVal p_strEntrada)
	Dim arrAux
	Dim strSaida
	Dim i
	If Not(IsNull(p_strEntrada) OR p_strEntrada = "") Then
		p_strEntrada = LCase(p_strEntrada)
		arrAux = Split(p_strEntrada)
		For i=0 To UBound(arrAux)
			strSaida = strSaida & UCase(Left(arrAux(i),1)) & Mid(arrAux(i),2) & " "
		Next
		strSaida = Trim(strSaida)
	End If
	capitalize = strSaida
End Function 

	arquivo = Campo_Form("arquivo")
	if arquivo = "" then response.redirect "upprodutos1.asp"
	dim caminho
	dim fs
	Set fs = Server.CreateObject("Scripting.FileSystemObject")
	caminho = Server.MapPath(arquivo)
'	Verificando se o arquivo existe
	If fs.FileExists(caminho) Then
'		Abre o arquivo 
		Set objFile = fs.OpenTextFile(caminho)

'		Enquanto o arquivo CSV nao termina 
		While Not objFile.AtEndOfStream 
'			Armazena uma linha do CSV 
			strText = objFile.readLine

			prod_codigo = MID(strText, 1, 5)
			prod_nome = MID(strText, 5, 20)
'			Aqui, levando em consideração que o objeto de conexão já foi criado, iremos inserir os dados linha a linha.
			Conn.execute "insert into produtos1 (prod_codigo, prod_nome) values ('" & prod_codigo & "','" & prod_nome & "')"

		Wend

		Set objFile = nothing
		fs.DeleteFile(caminho)
	end if
	Set fs = nothing
	
'	CriarRecordset rs
'	rs.open "SELECT prod_nome, prod_codigo FROM produtos1", Conn, 1, 1
'		Conn.execute "insert into produtos1 (prod_codigo, prod_nome) values ('" & prod_codigo & "','" & prod_nome & "')"
'		rs.movenext
'	FecharRecordset rs
'	Conn.execute "delete from produtos"
'	FecharBD Conn

	response.redirect "upprodutos1.asp"

%>

Boaa... funcionou belezinha...

 

Mas como eu falo por exemplo para ele não ler as 3 ultimas linhas do arquivo?... teria como?

Compartilhar este post


Link para o post
Compartilhar em outros sites

SALVE SALVE GALERA!!!

 

Resolvido o problema, queria agradecer ao Salgado pela ajuda.

 

Resolvi o colocando dois contadores na página, pois tinha que retirar algumas linhas do começo do arquivo txt e outras do final.

 

Se alguem quiser depois como fiz só pedir...

 

Grande abraço!

 

Até

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.