Fórum Exportar .txt para Db #324156
24/06/2006
0
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.
Marcelovms
Curtir tópico
+ 0Posts
24/06/2006
Aerreira
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
24/06/2006
Marcelovms
Como eu adicionaria nessa rotina acima????
Gostei + 0
25/06/2006
Adriano Santos
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
25/06/2006
Aerreira
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
Clique aqui para fazer login e interagir na Comunidade :)