Ir para conteúdo

POWERED BY:

Arquivado

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

KBR

[Resolvido] Sistema de importação de dados

Recommended Posts

Galera,

 

Tenho o seguinte arquivo de texto com 07 colunas com valores para importar para minha tabela com separação por limitação de texto.

Link para arquivo

 

O arquivo está no link acima. Como faço para separar esses dados e importar para minha tabela?

 

Uso MID, SPLIT?

 

No aguardo.

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

usa o SPLIT, olha um exemplo simples

 

<%
NomeCompleto="Xan burzum teste de texto"

temp = Split(NomeCompleto,chr(32))

Primeiro_Nome =  temp(0)

Response.Write "Primeiro Nome é: " & Primeiro_Nome

%>

nesse caso simples usando o CHR(32) para quebrar o texto, pode ser virgula, |, \, -

qualquer caracter

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ainda não deu certo.

 

Vou explicar passo a passo o que estou fazendo para que possa verificar onde estou errando. O que eu teria que fazer aqui seria um array dento de outro array, porque primeiro preciso dividir as linhas e depois dividir os campos de cada linha. Segue abaixo meu código... o resultado vou postar como se meu arquivo de importação tivesse 3 linhas/registros.

 

importacao = request("importacao")
importacao = replace(importacao," ","|")
importacao = replace(importacao,"||||||||","|")
importacao = replace(importacao,"|||||||","|")
importacao = replace(importacao,"||||||","|")
importacao = replace(importacao,"|||||","|")
importacao = replace(importacao,"||||","|")
importacao = replace(importacao,"|||","|")
importacao = replace(importacao,"||","|")
importacao = replace(importacao,chr(13),"<br>")
importacao = split(importacao,"<br>")

for each produto in importacao
	
	response.write produto&"<br>"
	
next

RESULTADO

 

000001|4.2500|6.4000|1.650|1.950|2.550|-3.0000

000002|1.7000|2.4000|2.260|2.470|2.580|-3.0000

000003|0.5900|0.9000|8.600|9.440|10.780|3.0000

Até aí maravilha, consegui dividir as linhas. Agora preciso capturar os campos, do campo1 ao campo7, ou seja, criar um outro array dividindo pelo |

 

importacao = request("importacao")
importacao = replace(importacao," ","|")
importacao = replace(importacao,"||||||||","|")
importacao = replace(importacao,"|||||||","|")
importacao = replace(importacao,"||||||","|")
importacao = replace(importacao,"|||||","|")
importacao = replace(importacao,"||||","|")
importacao = replace(importacao,"|||","|")
importacao = replace(importacao,"||","|")
importacao = replace(importacao,chr(13),"<br>")
importacao = split(importacao,"<br>")

for each produto in importacao
	
	campo = split(produto,"|")
	codigo = campo(0)
	preco1 = campo(1)
	
next

ERRO

 

Tipo de erro:

Erro de tempo de execução do Microsoft VBScript (0x800A0009)

Subscrito fora do intervalo: '[number: 1]'

/89embalagens.com.br/teste.asp, line 27

Onde a linha 27 é preco1 = campo(1)

 

Se eu deixo somente o campo(0) ele não dá erro e me retorna somente o primeiro campo de cada registro, mas do 1 em diante ele dá esse erro.

 

Alguém sabe o que pode ser?

 

Abraços e obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Subscrito fora do intervalo normalmente significa que você tentou acessar um elemento de uma matriz que foi ou superiores aos seus UBound ou inferior ao seu LBound. Com o seguinte código:

<%
dim foo (1)
response.write foo (2)
%>

Ocorre o seguinte erro:

 

Microsoft VBScript runtime error '800a0009 '

«[Número: 2] 'Subscrito fora do intervalo

/ <file> Asp., <line> Linha

 

Aqui é uma demonstração do problema:

 

<% 
    str = "Olá, e aí" 
    strs = split(str,",") 
    response.write strs(12) 
%>

Olhando para o código, é fácil ver que o maior elemento da STRs () array seria 2 (desde split () retorna uma matriz baseada em 0). Para evitar o erro aconteça, consulte sempre o UBound de uma matriz antes cegamente tentando acessá-lo. Por exemplo:

 

<% 
    str = "Olá, e aí" 
    strs = split(str,",") 
    if ubound(strs) >= 12 then 
        response.write strs(12) 
    else 
        response.write "Desculpe, não há nenhum elemento 12." 
    end if 
%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema é que há um elemento. Se eu dou um segundo FOR nesse array eles são exibidos. Tanto é que se eu der um UBOUND ele me retorna o valor "6".

 

Não sei mais o que pode estar acontecendo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

dá um response.write no campo para ver o que esta sendo passado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Resolvi da seguinte maneira

 

Set upl = Server.CreateObject("SoftArtisans.FileUp")
upl.Path = "e:\vhosts\\httpdocs\__upl\"
upl.Save
arquivo="dados.txt"
upl.form("Arquivo").SaveAs "e:\vhosts\\httpdocs\__upl\"&arquivo

set confile = createObject("scripting.filesystemobject") 
set fich = confile.OpenTextFile(server.mappath("../__upl/dados.TXT")) 

conta=0

Do while not fich.AtEndOfStream
conta=conta+1
Linha = fich.ReadLine()
Linha = replace(Linha," ","|")
Linha = replace(Linha,"||||||||","|")
Linha = replace(Linha,"|||||||","|")
Linha = replace(Linha,"||||||","|")
Linha = replace(Linha,"|||||","|")
Linha = replace(Linha,"||||","|")
Linha = replace(Linha,"|||","|")
Linha = replace(Linha,"||","|")

arrayLinha = split(linha, "|", -1, 1)

if ubound(arrayLinha)=6 then
	
	codigo = int(arrayLinha(0))
	custo = replace(formatnumber(replace(arrayLinha(1),".",","),2),",",".")
	venda = replace(formatnumber(replace(arrayLinha(2),".",","),2),",",".")
	revenda = replace(formatnumber(replace(arrayLinha(3),".",","),2),",",".")
	promocional = replace(formatnumber(replace(arrayLinha(4),".",","),2),",",".")
	normal = replace(formatnumber(replace(arrayLinha(5),".",","),2),",",".")
	estoque = cdbl(replace(arrayLinha(6),".0000",""))
	
	sql = "update tab_produtos set valor='"&normal&"', valor_promocional='"&promocional&"', valor_custo'"&custo&"', valor_venda='"&venda&"', valor_revenda='"&revenda&"' where codigopadrao="&codigo&""
	connect.execute(sql)
	'response.write sql&"<br>"
	
'response.write codigo&"<br>"

else
	
	if conta=1 then
	session("msg")= "<script language = javascript>alert('Erro!')</script>"
	response.redirect "?"
	end if
	
end if

loop

fich.close()

session("msg")= "<script language = javascript>alert('Valores atualizados com sucesso!')</script>"
response.redirect "?"

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.