Copiar conteúdo de txt para BD

Delphi

01/05/2005

Olá colegas,
Estou tentando copiar o conteúdo de um arquivo txt para uma tabela ( a tabela é paradox)
As linhas do arquivo txt estão assim:

123456789012345|MARIA DA SILVA|26/03/1964|F|15/03/2005|GOIANIA|GO
123453698745698|JOSE RODRIGUES GOMES|15/08/1976|M|123/04/2005|GOIANIA|GO
...............


Mas quando clico no botão para executar a cópia para a tabela, os registros são gravados em todos os campos, Por exemplo:

No campo numero sai assim:
123456789012345|MARIA DA SILVA|26/03/1964|F|15/03/2005|GOIANIA|GO

No campo Nome sai do mesmo jeito;
123456789012345|MARIA DA SILVA|26/03/1964|F|15/03/2005|GOIANIA|GO

sendo que deveria sair assim:
no campo Numero: [b:5b0483d5dd]123456789012345[/b:5b0483d5dd]

no campo Nome assim: [b:5b0483d5dd]MARIA DA SILVA[/b:5b0483d5dd]

e assim sucessivamente.


o que será que está errado no codigo que estou usando?
segue abaixo o codigo.
fico no aguardo da ajuda de todos, desde ja meus agradecimentos.


procedure TForm1.Button1Click(Sender: TObject);
var
TXT : TextFile;
Entrada: String;
I : Integer;
Begin
AssignFile(TXT,´C:\TEXTO\Texto\Texto.TXT´); // Diretorio onde se encontra o arquivo .TXT

Reset(TXT);
While not Eof(TXT) do
Begin
ReadLn(TXT,Entrada); //Variável que vai receber linha a linha as informações do arquivo TXT
Table1.Insert;

Table1Numero.Value:= Copy(Entrada,1,15);
Table1Nome.Value:= Copy(Entrada,2,50);
Table1DataNasc.Value:= Copy(Entrada,03,10);
Table1Sexo.Value:= Copy(Entrada,04,02);
Table1DataEmis.Value:= Copy(Entrada,05,10);
Table1Municipio.Value:= Copy(Entrada,06,50);
Table1UF.Value:= Copy(Entrada,07,02);
Table1.Post;

End;
CloseFile(TXT);
end;


Clenio

Clenio

Curtidas 0

Respostas

Marco Salles

Marco Salles

01/05/2005

Eu acho que o erro Possivelmente a erro nas nas instruçoes Copy:

Codigo Original
Table1Numero.Value:= Copy(Entrada,1,15); 
Table1Nome.Value:= Copy(Entrada,2,50); 
Table1DataNasc.Value:= Copy(Entrada,03,10); 
Table1Sexo.Value:= Copy(Entrada,04,02); 
Table1DataEmis.Value:= Copy(Entrada,05,10); 
Table1Municipio.Value:= Copy(Entrada,06,50); 
Table1UF.Value:= Copy(Entrada,07,02); 
Table1.Post
;

Novo Codigo
Table1Numero.Value:= Copy(Entrada,1,15);
Table1Nome.Value:= Copy(Entrada,16,50);
Table1DataNasc.Value:= Copy(Entrada,67,10);
Table1Sexo.Value:= Copy(Entrada,78,02);
Table1DataEmis.Value:= Copy(Entrada,81,10);
Table1Municipio.Value:= Copy(Entrada,92,50);
Table1UF.Value:= Copy(Entrada,143,02);
Table1.Post;


GOSTEI 0
Clenio

Clenio

01/05/2005

Olá,

Fiz as alterações mas, infelismente não deu certo, fico na esperaça que alguém possa me ajudar.

Valeu pela boa intenção.


GOSTEI 0
Marco Salles

Marco Salles

01/05/2005

Olá, Fiz as alterações mas, infelismente não deu certo, fico na esperaça que alguém possa me ajudar
.

A dica que passei para voce ,[b:706dfc6418] foi apenas uma idéia [/b:706dfc6418]....

:arrow: Depende muito de como esta seu arquivo Texto

Por exemplo , Da para entender que voce separou para o Nome uma string de tamanho 50...
Table1Nome.Value:= Copy(Entrada,2,50);

Então , com estão prenchidos os nomes no arquivo txt, :?:
:?: voce esta preenchendo-os com o espaço , para completar 50 ou voce esta usando um delimator, para informar que é o fim do Campo :?:

:arrow: Depende tb de com esta configurado os campos de sua base de dados

Olhando a sua entrada , da para perceber entender , que voce usa o Caracter ´[size=18:706dfc6418][color=darkred:706dfc6418][b:706dfc6418]|[/b:706dfc6418][/color:706dfc6418][/size:706dfc6418]´ , para separar os campos... é isto mesmo :?: :?:

Em outras palavras, o que voce quer , aparentemente não é dificil mas tem que informar algo mais.... Como esta seu arquivo Txt, se voce usa algum caracter especial para separar os campos, como estão definidos os seus campos na sua base de dados... enfim...


GOSTEI 0
Marco Salles

Marco Salles

01/05/2005

Fiz rapidamente aqui um programinha para ler um dado qualquer ,
usando o caracter ´[size=18:6de3208aa8][color=red:6de3208aa8][b:6de3208aa8]|[/b:6de3208aa8][/color:6de3208aa8][/size:6de3208aa8]´ como delimitador de fim de campo...

Este exemplo pode ser facilmente adaptado para ás suas necessidades

procedure TForm1.Button2Click(Sender: TObject);
var
Entrada: String;
I : Integer;
j:Integer;
tamanho:Integer;
begin
  entrada:=´123456789012345|MARIA DA SILVA|26/03/1964|F|15/03/2005|GOIANIA|GO´;
  tamanho:=Length(entrada);
  j:=1;
  i:=Pos(´|´,entrada);
  Showmessage(Copy(Entrada,j,i-j));//Codigo;
  J:=J+i;
  i:=Pos(´|´,copy(entrada,j,Tamanho));
  Showmessage(Copy(Entrada,j,i-1));//nome;
  j:=j+i;
  i:=Pos(´|´,copy(entrada,j,Tamanho));
  Showmessage(Copy(Entrada,j,i-1));//Data de Nascimento;
  j:=j+i;
  i:=Pos(´|´,copy(entrada,j,Tamanho));
  Showmessage(Copy(Entrada,j,i-1));//Sexo
  j:=j+i;
  i:=Pos(´|´,copy(entrada,j,Tamanho));
  Showmessage(Copy(Entrada,j,i-1));//DataDeEmissão;
  j:=j+i;
  i:=Pos(´|´,copy(entrada,j,Tamanho));
  Showmessage(Copy(Entrada,j,i-1));//Municipio;
  j:=j+i;
  Showmessage(Copy(Entrada,j,tamanho-1));//estado;
end;


Rode e teste o Exemplo

:wink: P:s No Ultimo campo , o do estado , não tem Delimatador, de fato não precisa ter

Se não consegui , adapatar á sua necessidade , não se intimide , o forum serve é para esclarecer ás dúvidas


GOSTEI 0
Clenio

Clenio

01/05/2005

Olá, parece que estou dando muito trabalho ne, desculpa.

Vou detalhar aqui como estão a tabela e o Arquivo txt.

Os campos da base de dados estão assim:
Numero= Alpha 15
Nome= Alpha 50
DataNasc= Date
Sexo= Alpha 1
DataEmis= Date
Municipio= Alpha 30
UF= Alpha 2

No arquivo txt estou usando o [b:ee0f33baf2]Caracter ´|´ , para separar os campos[/b:ee0f33baf2],
as duas primeiras linhas do arquivo são estas abaixo:

123456789012345|MARIA DA SILVA|26/03/1964|F|15/03/2005|GOIANIA|GO
123453698745698|JOSE RODRIGUES|15/08/1976|M|123/04/2005|GOIANIA|GO


Espero que desta vez eu tenha explicado direitinho.
Obrigado por tudo.


GOSTEI 0
Marco Salles

Marco Salles

01/05/2005

Tente isto :

procedure TForm1.Button1Click(Sender: TObject); 
var 
TXT : TextFile; 
Entrada: String; 
I : Integer; 
j:Integer;
Tamanho:Integer;
Begin 
AssignFile(TXT,´C:\TEXTO\Texto\Texto.TXT´); // Diretorio onde se encontra o arquivo .TXT 

Reset(TXT); 
While not Eof(TXT) do 
Begin 
ReadLn(TXT,Entrada); //Variável que vai receber linha a linha as informações do arquivo TXT 
Table1.Insert; 
  tamanho:=Length(entrada);
  j:=1;
  i:=Pos(´|´,entrada);
  Table1Numero.Value:=Copy(Entrada,j,i-j);//Codigo;
  J:=J+i;
  i:=Pos(´|´,copy(entrada,j,Tamanho));
  Table1Nome.Value:=Copy(Entrada,j,i-1);//nome;
  j:=j+i;
  i:=Pos(´|´,copy(entrada,j,Tamanho));
  Table1DataNasc.Value:=StrToDate(Copy(Entrada,j,i-1));//Data de Nasci;
  j:=j+i;
  i:=Pos(´|´,copy(entrada,j,Tamanho));
  Table1Sexo.Value:=Copy(Entrada,j,i-1);//Sexo
  j:=j+i;
  i:=Pos(´|´,copy(entrada,j,Tamanho));
  Table1DataEmis.Value:=StrToDate(Copy(Entrada,j,i-1));//DataDeEmiss;
  j:=j+i;
  i:=Pos(´|´,copy(entrada,j,Tamanho));
  Table1Municipio.Value:= Copy(Entrada,j,i-1);//Municipio;
  j:=j+i;
  Table1UF.Value:= Copy(Entrada,j,tamanho-1);//estado;
Table1.Post; 
End; 
CloseFile(TXT); 
end;


[b:664c214764][color=darkred:664c214764]Favor postar o resultado[/color:664c214764][/b:664c214764]


GOSTEI 0
Clenio

Clenio

01/05/2005

Marco Salles,

Não tenho palavras para agradecer, [b:c943dac2c6]funcionou perfeitamente[/b:c943dac2c6], ainda bem que aqui no forum existem muitas pessoas assim como você, que sabe muito e tem boa vontade em ajudar aos que ainda estão em fase de aprendizado, assim como eu.

[b:c943dac2c6]Muito obrigado, [/b:c943dac2c6]

[color=blue:c943dac2c6]O resultado foi perfeito.[/color:c943dac2c6][size=18:c943dac2c6][/size:c943dac2c6]


GOSTEI 0
POSTAR