Ir para conteúdo
Fórum Script Brasil
  • 0

Converter Txt Para Paradox E Vice-versa


Eder

Pergunta

Olá...peguei um exemplinho na net ...mas não tou entendendo uma coisa.

ESTE codigo Abaixo é para converter PARADOX>>>TXT

procedure TForm1.Button3Click(Sender: TObject);

Var

F: TextFile;

begin

AssignFile(F,'Clientes.txt');

Rewrite(F);

Table1.First;

While not Table1.Eof do

begin

Writeln(F,Table1.FieldByName('Codigo').Value +Table1.FieldByname('Nome').Value +Table1.FieldByname('Cidade').Value +Table1.FieldByname('uf').Value);

Table1.Next;

end;

CloseFile(F);

Button2.Enabled := True;

Button3.Enabled := False;

end;

NA CONVERSÃO o arquivo TXT ficou assim:

00001JOSEBRUSQUESC

00002MARIAINDAIALSC

00003CARLOSTIMBOSC

notem que ficou tudo misturado.

Agora se eu for converter este TXT para um ou *.DB para fins de teste ficaria assim:

codigo para converter TXT>>PARADOX:

procedure TForm1.Button2Click(Sender: TObject);

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,06,20);

Table1.FieldByName('Cidade').Value := Copy(Entrada,26,10);

Table1.FieldByName('UF').Value := Copy(Entrada,36,02);

Table1.Post;

end;

CloseFile(Txt);

Button3.Enabled := True;

end;

A tabela convertida ficaria assim:

codigo-nome -cidade-sc

00003-CARLOSTIMBOSC

00002-MARIAINDIAALSC

00001-JOSEBRUSQUESC

notem que no txt para paradox as cidades e uf´s invadiram o campo de nome e deixou os campos cidade/uf em branco.

acredito que é por causa do txt esta misturado..sem nenhum ordem...acredito também que deva haver um layout pra seguir.....para não ficar bagunçado.

Como proceder neste caso..alguém poderia me explicar.......em detalhes por favor.

muito.Grato :D

Link para o comentário
Compartilhar em outros sites

Posts Recomendados

  • 0

Ola..pessoal...estou voltando a este tópico...pois ainda estão com um probleminha....

Na primeira coluna do csv tem uma classificação do registro tipo nr 3 e 4......Então eu verifiquei e achei importante somente importar os registros que tem neste primeira coluna o nr = 3

parece que eu deveria fazer um if....o problema é que eu não consigo fazer este IF dentro do codigo...pois não sei como trata-lo.

Note que tem um IF tratando da linha........neste caso eu substituiria este IF por outro como citei acima.

segue abaixo um pedacinho do codigo, mas neste tópico aparece o codigo completo

procedure TForm1.XiButton1Click(Sender: TObject);

Var

Txt: TextFile;

Entrada: String;

Linhas: Integer;

now_temp: TDateTime;//variavel contadora de tempo

begin

//CONTADOR DE TEMPO

now_temp:=now;//recebe tempo

tempo.caption:= '00:00:00';

//

TABLE1.Active:=TRUE;

Assignfile(Txt,'c:\yyyy\xxxx_teste.csv');//caminho do arquivo CSV

Reset(Txt);

Linhas := 0;

While not Eoln(Txt) do

begin

Readln(Txt,Entrada);

Inc(Linhas);

if Linhas > 3 then//aqui verifica e desconcidera AS 4 primeiras linhas do CSV

begin

Table1.Insert;//Abaixo converte pra *.DB..lembrando que antes deve criar o DB no DataBase Desktop.

Table1.FieldByName('1').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);

Delete(Entrada, 1, Pos(PathSep, Entrada));

Table1.FieldByName('sigla_ctrc').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);

Delete(Entrada, 1, Pos(PathSep, Entrada));

Table1.FieldByName('numero_ctrc').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);

Delete(Entrada, 1, Pos(PathSep, Entrada));

abaixo um pedaço da imagem do inicio do csv onde este a COLUNA=1 .....a primeira coluna

0    HHHHHHHHHHHHHHHH           HHHHHHHHHHHHHHHHH    01/03/07-07:39    
1     sigla_ctrc     numero_ctrc     ctrc/subcontr     situacao_ctrc data_emissao
2     sigla_ctrc     numero_ctrc     ctrc/subcontr     serie_nf          nota_fiscal
3    BLU    365548-2    C    L    06/02/2007
4    BLU    365548-2    C           4180
3    BLU    366985-8    C    F    22/02/2007
4    BLU    366985-8    C           273457
4    BLU    366985-8    C           273456
4    BLU    366985-8    C           273458
3    BLU    366863-1    C    F    21/02/2007
4    BLU    366863-1    C           54115
4    BLU    366863-1    C           54116
3    SPO    352485-0    C    P    16/02/2007
4    SPO    352485-0    C           138637
4    SPO    352485-0    C           138651

Resumindo....eu só queria que o codigo importasse os registros como o inicial 3

muito Grato

Link para o comentário
Compartilhar em outros sites

  • 0

Opa

Antes de você fazer o comando de Copy é só você tratar exemplo

While not Eoln(Txt) do

begin

Readln(Txt,Entrada);

Inc(Linhas);

if Linhas > 3 then//aqui verifica e desconcidera AS 4 primeiras linhas do CSV

if (Copy(Entrada, 1, 1) = '3') then

begin

Table1.Insert;//Abaixo converte pra *.DB..lembrando que antes deve criar o DB no DataBase Desktop.

Table1.FieldByName('1').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);

Delete(Entrada, 1, Pos(PathSep, Entrada));

Table1.FieldByName('sigla_ctrc').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);

Delete(Entrada, 1, Pos(PathSep, Entrada));

Table1.FieldByName('numero_ctrc').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);

Delete(Entrada, 1, Pos(PathSep, Entrada));

...

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
Reset(Txt);
Linhas := 0;
While not Eoln(Txt) do
begin
  Readln(Txt,Entrada);
  ...
end;
Eder, no lugar de EOLN (End Of LiNe) voce não deveria estar utilizando EOF (End Of File)? Me parece que sim. Uma sugestão para "simplificar" seu processamento:
...
Reset(Txt);
// para deixar simplificar algumas coisas, você pode pular as 3 linhas antes de 
// entrar no While principal, já que será obrigatório chegar a 4a. linha, de modo 
// que você terá um if a menos para cada linha carregada do arquivo!!!
Linhas := 1;
while not EOF(Txt) and (Linhas <= 3) do
begin
  Readln(Txt,Entrada);
  Inc(Linhas);
end;
// ao sair do while anterior, Linhas é = 4 ou o fim do arquivo foi encontrado
// se não foi por fim do arquivo, então você estará posicionado na linha 4 que é
// aonde começam seus dados. Deste modo, no próximo While, você percorrerá
// o arquivo até o final (seguindo instruções do Churc) mas colocará o ReadLn 
// exatamente antes do End para que a linha atual seja processada para só
// depois ler a nova linha e testar no while se é ou não fim de arquivo
While not EOF(Txt) do
begin
  if (Copy(Entrada, 1, 1) = '3') then
  begin
    Table1.Insert;//Abaixo converte pra *.DB..lembrando que antes deve criar o DB no DataBase Desktop.
    ...
  end;
  ...
  Inc(Linhas);
  Readln(Txt,Entrada);
end;
...

Abraços

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,9k
×
×
  • Criar Novo...