Ir para conteúdo

POWERED BY:

Arquivado

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

Elbrinner

[Resolvido] Subir txt e gravar na bd

Recommended Posts

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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?

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Exportando para Excel facilita porque você poderá exporta do Excel para CSV com ponto-e-vírgula.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Que bom

 

Se surgirem duvidas poste

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

me tira uam duvida é que pode ter desconfigurado na tag que usou aqui

 

mas a cada duas linhas ali é uma ou sao duas mesmo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu olhei com o MID tambem mas no inicio ate daria mas la no fim bagunça tudo

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

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.