Eder Postado Maio 26, 2006 Denunciar Share Postado Maio 26, 2006 Olá...peguei um exemplinho na net ...mas não tou entendendo uma coisa.ESTE codigo Abaixo é para converter PARADOX>>>TXTprocedure TForm1.Button3Click(Sender: TObject);VarF: TextFile;beginAssignFile(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:00001JOSEBRUSQUESC00002MARIAINDAIALSC00003CARLOSTIMBOSCnotem 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);varTxt : TextFile;Entrada : String;beginAssignfile(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-sc00003-CARLOSTIMBOSC00002-MARIAINDIAALSC00001-JOSEBRUSQUESCnotem 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Eder Postado Março 21, 2007 Autor Denunciar Share Postado Março 21, 2007 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 = 3parece 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 completoprocedure TForm1.XiButton1Click(Sender: TObject);VarTxt: TextFile;Entrada: String;Linhas: Integer;now_temp: TDateTime;//variavel contadora de tempobegin //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 coluna0 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 138651Resumindo....eu só queria que o codigo importasse os registros como o inicial 3muito Grato Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Churc Postado Março 21, 2007 Denunciar Share Postado Março 21, 2007 OpaAntes de você fazer o comando de Copy é só você tratar exemploWhile not Eoln(Txt) dobeginReadln(Txt,Entrada);Inc(Linhas);if Linhas > 3 then//aqui verifica e desconcidera AS 4 primeiras linhas do CSVif (Copy(Entrada, 1, 1) = '3') thenbeginTable1.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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Eder Postado Março 21, 2007 Autor Denunciar Share Postado Março 21, 2007 valeu Churc...muito grato..t+ :D Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Março 28, 2007 Denunciar Share Postado Março 28, 2007 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Eder Postado Março 29, 2007 Autor Denunciar Share Postado Março 29, 2007 Ok..Michel...a idéia é boa...depois vou dar uma testadinha...valeu..carinha ....abraçosEder :D Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Eder
Olá...peguei um exemplinho na net ...mas não tou entendendo uma coisa.
ESTE codigo Abaixo é para converter PARADOX>>>TXT
NA CONVERSÃO o arquivo TXT ficou assim:
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:
A tabela convertida ficaria assim:
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
30 respostass a esta questão
Posts Recomendados
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.