Exportar .txt para Db
Pessoal,
Estou tentando exportando um arquivo txt para uma tabela db(paradox), até que exportar eu consegui mas com alguns erros, vejam só.
O formato do arquivo texto:
121542;EMPRESA TEXTIL;BRASIL;GOIANIA
O arquivo texto é enorme e usa o ponto e virgula com separador.
Estou usando os seguintes comandos:
Porém estou com um problema como o campo codigo é infinito e o nome da empresa sempre varia, sempre os dados ficam todos errados.
Ex: o campo nome pega um pedaço do codigo e etc...
Como faço para determinar que cada campo leia somente até a virgula???
Me ajudem galera, estou quase doido já...kkkkkkkkkkkk
Antecipadamente, Muito obrigado.
Estou tentando exportando um arquivo txt para uma tabela db(paradox), até que exportar eu consegui mas com alguns erros, vejam só.
O formato do arquivo texto:
121542;EMPRESA TEXTIL;BRASIL;GOIANIA
O arquivo texto é enorme e usa o ponto e virgula com separador.
Estou usando os seguintes comandos:
var
Txt : TextFile;
Entrada : String;
begin
Assignfile(Txt,´Clientes.Txt´);
Reset(Txt);
While not Eoln(Txt) do
begin
Readln(Txt,Entrada);
Table1.Insert;
Table1.FieldByName(´Codigo´).Value := Copy(Entrada,01,05);
Table1.FieldByName(´nome´).Value := Copy(Entrada,07,15);
Table1.FieldByName(´pais´).Value := Copy(Entrada,35,20);
Table1.FieldByName(´estado´).Value := Copy(Entrada,25,08);
Table1.Post;
end;
CloseFile(Txt);
Porém estou com um problema como o campo codigo é infinito e o nome da empresa sempre varia, sempre os dados ficam todos errados.
Ex: o campo nome pega um pedaço do codigo e etc...
Como faço para determinar que cada campo leia somente até a virgula???
Me ajudem galera, estou quase doido já...kkkkkkkkkkkk
Antecipadamente, Muito obrigado.
Marcelovms
Curtidas 0
Respostas
Aerreira
24/06/2006
Você está exportando ou importanto?!
Bom, o que eu acho melhor é tratar cada linha do TXT como um único texto, trazendo a linha inteira para uma variável string. Depois você vai varrendo a string caracter-a-caracter até encontrar um ponto-e-virgula. Quando encontrar o primeiro ´;´ já sabe que da posição zero até ali está o campo Código. Marca esse ponto, e continua procurando ´;´, quando encontrar outro ; sabe que da última parada + 1 até o ponto atual está o seu campo ´empresa´, e assim sucessivamente até encontrar todos os campos daquela linha. Depois é só jogar o que foi armazenado para a sua tabela, e passar para a próxima linha do TXT.
Dessa maneira os campos poderão ter qualquer tamanho, a rotina buscará a divisão entre eles baseando-se nos ; separadores, sem considerar o tamanho de cada campo.
Será que expliquei direito?
Bom, o que eu acho melhor é tratar cada linha do TXT como um único texto, trazendo a linha inteira para uma variável string. Depois você vai varrendo a string caracter-a-caracter até encontrar um ponto-e-virgula. Quando encontrar o primeiro ´;´ já sabe que da posição zero até ali está o campo Código. Marca esse ponto, e continua procurando ´;´, quando encontrar outro ; sabe que da última parada + 1 até o ponto atual está o seu campo ´empresa´, e assim sucessivamente até encontrar todos os campos daquela linha. Depois é só jogar o que foi armazenado para a sua tabela, e passar para a próxima linha do TXT.
Dessa maneira os campos poderão ter qualquer tamanho, a rotina buscará a divisão entre eles baseando-se nos ; separadores, sem considerar o tamanho de cada campo.
Será que expliquei direito?
GOSTEI 0
Marcelovms
24/06/2006
Estou tentando é importar mesmo, como eu faria para fazer essa varredura, já tentei de todo jeito e não conseguei!!!
Como eu adicionaria nessa rotina acima????
Como eu adicionaria nessa rotina acima????
GOSTEI 0
Adriano Santos
24/06/2006
Estou tentando é importar mesmo, como eu faria para fazer essa varredura, já tentei de todo jeito e não conseguei!!!
Como eu adicionaria nessa rotina acima????
Exemplinho básico pra vc iniciar:
procedure TForm1.Button1Click(Sender: TObject); var Teste: string; Qtde: Integer; Inicio: Integer; Campo: string; I: Integer; begin Teste := Edit1.Text; Inicio:= 1; Qtde:= 0; ListBox1.Items.Clear; for I := 1 to Length(Teste) do begin if Teste[I] = ´;´ then begin Campo := Copy(Teste, Inicio, Qtde); ListBox1.Items.Add(Campo); Inicio := I + 1; Qtde := 0; end else Inc(Qtde); end; end;
GOSTEI 0
Aerreira
24/06/2006
Experimente algo mais ou menos assim:
var Txt : TextFile; Entrada, mCODIGO, mNOME, mPAIS, mESTADO: String; begin Assignfile(Txt,´Clientes.Txt´); Reset(Txt); While not Eoln(Txt) do begin Readln(Txt,Entrada); tmp2 := Entrada; mPOS := ansipos(´;´,tmp2); tmp := trim(copy(tmp2,1,mPOS-1)); mCODIGO := tmp; tmp2 := copy(tmp2,mPOS+1,999); mPOS := ansipos(´;´,tmp2); tmp := trim(copy(tmp2,1,mPOS-1)); mNOME := tmp; tmp2 := copy(tmp2,mPOS+1,999); mPOS := ansipos(´;´,tmp2); tmp := trim(copy(tmp2,1,mPOS-1)); mPAIS := tmp; tmp2 := copy(tmp2,mPOS+1,999); mPOS := ansipos(´;´,tmp2); tmp := trim(copy(tmp2,1,mPOS-1)); mESTADO := tmp; Table1.Insert; Table1.FieldByName(´Codigo´).Value := mCODIGO; Table1.FieldByName(´nome´).Value := mNOME; Table1.FieldByName(´pais´).Value := mPAIS; Table1.FieldByName(´estado´).Value := mESTADO; Table1.Post; end; CloseFile(Txt);
GOSTEI 0