Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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.
O arquivo está no link acima. Como faço para separar esses dados e importar para minha tabela?
Uso MID, SPLIT?
No aguardo.
Obrigado.
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.
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
%>
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.
dá um response.write no campo para ver o que esta sendo passado
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 "?"
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