Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa tarde,
A empresa que trabalho aceitou um trabalho o qual precisa fazer uma coisa que nunca fiz e a principio não sei por onde começar.
Uma empresa de carro exporta um txt e quer adicionar está informação na tabela de uma base de dados mais apenas as quais não tenha o mesmo numero de matricula. Isso é, caso exista o mesmo numero de matricula em este registro não faz nada apenas nos outros. No caso eu tenho que apagar todos menos o que tem o mesmo numeor de matricula e adicionar todos os registros do txt na base de datos menos os que já estão registrado.
Minha duvida inicial é, como posso separar e pegar os dados se no arquivo txt eles estão assim:
kme909090 10/09/2002 vw Gol .1.0 16v 10,000
kiu0009898 10/10/2001 ft Palio 1.6 12,000
Tem como pegar os registro desta forma?
Obrigado
Sim, dê uma pesquisada sobre FileSystemObject, com ele você abre o arquivo, lê linha a linha e pode fazer um SPLIT nos dados da linha para separar cada dado em uma posição do array.
Se existem 3 espaço entre cada campo, facilita meu trabalho? Tambem existe a possibilidade de exportar em excel. Qual opção vocês acha melhor?
Obrigado pelas dicas
Se é padronizado o espaçamento entre cada campo, e se em algum campo não houver valor mas o espaçamento ser respeitado, não há problemas.
Quais são esses campos no exemplo que postou?
Até amanha de manhã não terei todos os dados exatos, amanha eu posto aqui.
Sei que os dados são: matricula do carro, ano do vehiculo, data de matriculação, preço, marca, codigo da onde vem o vehiculo, preço de custo , nome e pouco mais.
Vai ter um campo de observação tambem, esse eu ainda não sei muito bem o tamanho dele.
A parte disso vou ter que criar um campo para a empresa adicionar foto mais isso eu faço direto com a base de datos e acredito que não vai ser nenhum problema.
obrigado
Exportando para Excel facilita porque você poderá exporta do Excel para CSV com ponto-e-vírgula.
mas quanto mais automatico melhor
ja fiz algo assim onde trabalhava antes
tinha um relatorio em txt que precisava ir para o db
ai é so fazer o upload
abrir e varrer linha por linha com o FSO fazendo os testes necessarios apra decidir se incluira ou nao
usa o SPLIT para separar os valores em cada campo
precisa saber exatamente o que separa um campo do outro pois isto será usado no SPLIT
Obrigado a todos, estou cheio de ideias agora.
Vou começar a fazer.
Que bom
Se surgirem duvidas poste
Estava indo bem mais agora ao ver os datos bateu aquele medo de novo.
Os espaços não são regulares. Veja como está.
843 06/02/01 1105 29/11/06 A3486BPW RE LA2 CFE 1.9 BEIGE AM 105820 9.500,00 76,62 9576,62 7.200,00 1 1
671 28/07/01 1101 21/02/06 A3405BSX RE MGL AUTH 1.9 BEIGE TI 188765 4.397,00 146,55 5247,07 5.200,00 4 1
642 26/08/01 1112 31/01/06 A6478BSL JE CHEROKEE SPO GRIS PLA 149583 14.655,17 3.422,11 20422,11 15.150,00 21 1
636 01/09/01 1101 17/04/06 A0416BHT RE MGD EXP 1.9 AMARILLO 162000 4.913,79 2.265,51 7965,51 5.900,00 4 1
622 15/09/01 1105 09/09/06 A5470BZH NI PATROL GR LU AZUL 89973 15.086,21 1.175,98 18675,98 16.230,00 2 1
608 29/09/01 1104 28/05/06 A9483CWM RE SP4 EXP 2.2 AZUL CRE 52231 20.500,00 1.975,48 22475,48 20.900,00 1 1
O jeito vai ser excel então né?
Obrigado
Bem, de qualquer forma vou compartir da forma que fiz.
<%
nome_arquivo="prueba.txt"
set fso=createobject("scripting.filesystemobject")
if fso.FileExists(server.mappath(nome_arquivo)) then
Dim txt
Set txt = fso.OpenTextFile(server.mappath(nome_arquivo),1)
do while not txt.atEndOfline = true
Dim campo, linea
campo = txt.ReadLine
linea = Split(campo, " ", -1, 1)
response.write linea(0)
Loop
else
txt.Close
end if
%>
Estou pensando em fazer varios split para adaptar a situação. Seria uma solução?
Estive pensando e se os campos apesar da bagunça tenha um numero fixo de caracteres eu posso usar a função left para pegar tambem certo?
Qual seria a melhor opção.
Obrigado uma vez mais
Acho melhor você tentar mudar a forma de exportar... veja isso:
PATROL GR (1 espaço)
LA2 CFE 1.9 (2 espaços)
Vai complicar demais assim.
Imagino que Excel seja a solução... na verdade a melhor solução seria adaptar o sistema para exportar do jeito que você precisa.
me tira uam duvida é que pode ter desconfigurado na tag que usou aqui
mas a cada duas linhas ali é uma ou sao duas mesmo?
>
me tira uam duvida é que pode ter desconfigurado na tag que usou aqui
mas a cada duas linhas ali é uma ou sao duas mesmo?
Cada duas linha é uma.
>
Acho melhor você tentar mudar a forma de exportar... veja isso:
PATROL GR (1 espaço)
LA2 CFE 1.9 (2 espaços)
Vai complicar demais assim.
Imagino que Excel seja a solução... na verdade a melhor solução seria adaptar o sistema para exportar do jeito que você precisa.
Deu erro o forum =/ vou escrever de novo.
A empresa exporta os dados de uma base de dados a qual tenho certeza que poderia usar mais eles dizem que não tem acesso e que a única forma que tenho de recuperar os dados é pelo txt ou excel. Eles vão ter que exportar os dados a cada semana dai eles querem a forma mais facil possivel para eles.
Quando coloquei o codigo no forum só coloquei com dois um espaço na hora de usar o split mais na verdade no meu codigo inicial eu tinha 5 espaços porque pensei que todos seguia a mesma logica.
Como os dados sai de uma base de dados eles tem um tamanho em concreto do txt e por isso estou pensando em usar a função left para pegar os valores. A principio só preciso pegar 5 campos.
Obrigado pela atenção
o problema é que os espaços nao sao fixos e isso impede algo automatico
tem como gerar o relatorio num excel? porque ai nao teria como errar na hora de importar
>
o problema é que os espaços nao sao fixos e isso impede algo automatico
tem como gerar o relatorio num excel? porque ai nao teria como errar na hora de importar
Tem sim, só que vou ter que passar na empresa de novo.... Queria tentar resolver com o txt mesmo.
Eu falei errado a função que tinha pensando em usar. Eu tentei usar com a função MID e a principio bem mais estive observando que ela não reconhece muito bem os espaços.
Eu usei ela da forma tipica:
fecha_matricula = Mid(campo,20,8)
Os primeiros registros bem mais depois que os primeiros registros começa a aumentar de decimal ela começa a comer as primeiras letras.
Tipo:
Cod: 843 -> 29/11/01 => T3688BPW => RE Ok, aqui, quando o codigo tem 3 caracteres
Cod:7 -> /05/04 E => 711CVX R => M Erro, comeu varios caracteres.
Cod: 22 ->4/05/89 => 4493AN => W Erro, comeu um caracter tambem.
Teria alguma função para que transforme em uma string e que reconheça os espaços como um caracter?
Obrigado
Eu olhei com o MID tambem mas no inicio ate daria mas la no fim bagunça tudo
Use o Split, a separação padrão são 4 espaços, então coloque os 4 espaços como caractere separador.
<%
nome_arquivo="prueba.txt"
set fso=createobject("scripting.filesystemobject")
if fso.FileExists(server.mappath(nome_arquivo)) then
Dim txt
Set txt = fso.OpenTextFile(server.mappath(nome_arquivo),1)
do while TXT.AtEndOfStream = false
campo = txt.ReadLine
linea = Split(campo, " ", -1, 1)
For x=LBound(linea) to UBound(linea)
response.write linea(x) &"-"
Next
Loop
Set TXT = Nothing
else
Response.Write("Arquivo <b>"& Nome_Arquivo &"</b> não existe!")
end if
Set FSO = Nothing
%>
Testa agora.
>
Use o Split, a separação padrão são 4 espaços, então coloque os 4 espaços como caractere separador.
<%
nome_arquivo="prueba.txt"
set fso=createobject("scripting.filesystemobject")
if fso.FileExists(server.mappath(nome_arquivo)) then
Dim txt
Set txt = fso.OpenTextFile(server.mappath(nome_arquivo),1)
do while TXT.AtEndOfStream = false
campo = txt.ReadLine
linea = Split(campo, " ", -1, 1)
For x=LBound(linea) to UBound(linea)
response.write linea(x) &"-"
Next
Loop
Set TXT = Nothing
else
Response.Write("Arquivo <b>"& Nome_Arquivo &"</b> não existe!")
end if
Set FSO = Nothing
%>Testa agora.
Não existe separação padrão. tem campo que nem tem espaço de um para outro.
Vou fazer alguns testes aqui, mais to achando que vou precisar trabalhar com excel mesmo.
O resultado do seu codigo foi esse:
43 06/02/06 2205 29/22/02 P3686BPW RP LA2 CFP 2.9 BPIGP AM 205820 9.500,00 76,62 9576,62 7.200,00 2 2- -672 28/07/06 2202 22/02/02 P3005BSX RP MGL AUTH 2.9 BPIGP TI 288765 4.397,00 246,55 5247,07 5.200,00 4 2- -642 26/08/06 2222 32/02/02 P6378BSL JP CHPROKPP SPO GRIS PLA 249583 24.655,27 3.422,22 20422,22 25.250,00 22 2- -636 02/09/06 2202 27/04/02 P0226BHT RP MGD PXP 2.9 AMARILLO 262000 4.923,79 2.265,52 7965,52 5.900,00 4 2- -622 25/09/06 2205 09/09/02 P5270BZH NI PATROL GR LU AZUL- 89973 25.086,22 2.275,98 28675,98 26.230,00 2 2- -608 29/09/06 2204 28/05/04 P9883CWM RP SP4 PXP 2.2 AZUL CRP 52232 20.500,00 2.975,48 22475,48 20.900,00 2 2- -552 24/22/06 2222 04/03/03 P2786CFN PP PARTNPR FURG BLANCO 56965 7.000,00 2.422,42 8422,42 8.430,00 22 2- -535 22/22/06 2222 26/03/90 P9479CLM
Obrigado
Olhando pela edição o seu post que contém um trecho do arquivo pude notar que a separação é por tabulação e não por espaço, tente usar o Chr(9) no Split e teste por favor, com essa alteração.
<%
nome_arquivo="prueba.txt"
set fso=createobject("scripting.filesystemobject")
if fso.FileExists(server.mappath(nome_arquivo)) then
Dim txt
Set txt = fso.OpenTextFile(server.mappath(nome_arquivo),1)
do while TXT.AtEndOfStream = false
campo = txt.ReadLine
linea = Split(campo, Chr(9), -1, 1)
For x=LBound(linea) to UBound(linea)
response.write linea(x) &"-"
Next
Loop
Set TXT = Nothing
else
Response.Write("Arquivo <b>"& Nome_Arquivo &"</b> não existe!")
end if
Set FSO = Nothing
%>
Era isto mesmo, salvou meu día e não é a primeira vez que você faz isso.
Muito Obrigado
Se você conseguisse exportar com um "marcador" ao invés de espaço seria mais fácil manipular.
Ex: kme909090 | 10/09/2002 | vw | Gol .1.0 16v | 10,000
Da forma que está, vai ser complicado, pois no próprio exemplo que você mostrou, já possui diferenças de espaço no nome do veículo.
Caso não consiga exportar de outra forma, tenta trabalhar com os espaços mesmo.