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 Churc Postado Maio 26, 2006 Denunciar Share Postado Maio 26, 2006 tipo,procedure TForm1.Button3Click(Sender: TObject);VarF: TextFile;beginAssignFile(F,'Clientes.txt');Rewrite(F);Table1.First;While not Table1.Eof dobeginWriteln(F,Table1.FieldByName('Codigo').Value + PathSep + Table1.FieldByname('Nome').Value + PathSep + Table1.FieldByname('Cidade').Value + PathSep + Table1.FieldByname('uf').Value);Table1.Next;end;CloseFile(F);Button2.Enabled := True;Button3.Enabled := False;end;ficaria tipo00001;JOSE;BRUSQUE;SC00002;MARIA;INDAIAL;SC00003;CARLOS;TIMBO;SCai pra lerprocedure TForm1.Button2Click(Sender: TObject);varTxt : TextFile;Entrada : String;beginAssignfile(Txt,'Clientes.Txt');Reset(Txt);While not Eoln(Txt) dobeginReadln(Txt,Entrada);Table1.Insert;Table1.FieldByName('Codigo').Value := Copy(Entrada,1,Pos(PathSep, Entrada) - 1);Delete(Entrada, 1, Pos(PathSep, Entrada));Table1.FieldByName('Nome').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);Delete(Entrada, 1, Pos(PathSep, Entrada));Table1.FieldByName('Cidade').Value := Copy(Entrada, 1, Pos(PathSep, Entrada) - 1);Delete(Entrada, 1, Pos(PathSep, Entrada));Table1.FieldByName('UF').Value := Copy(Entrada, 1, Length(Entrada));Table1.Post;end;CloseFile(Txt);Button3.Enabled := True;end;PathSep é uma constante definida em SysUtils, onde você pode substituir por qualquer caracter que não esteja em nenhum campo do banco de dados.exemplo &, #, §qualquer coisa posta ai que não testei no delphiabraços Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Eder Postado Maio 26, 2006 Autor Denunciar Share Postado Maio 26, 2006 colega Churc...tem certeza que esta parte esta correta?Table1.FieldByName('Codigo').Value := Copy(Entrada,1,Pos(PathSep, Entrada) - 1);Delete(Entrada, 1, Pos(PathSep, Entrada));Table1.FieldByName('Nome').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);Delete(Entrada, 1, Pos(PathSep, Entrada));Table1.FieldByName('Cidade').Value := Copy(Entrada, 1, Pos(PathSep, Entrada) - 1);Delete(Entrada, 1, Pos(PathSep, Entrada));Table1.FieldByName('UF').Value := Copy(Entrada, 1, Length(Entrada));no meu codigo tava assim: 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);porque ....aonde entra a difinação do campo da tabela como tamanho onde começa e terminaexemplo: Entrada,01,05);grato...fico no aguardo..amigão. :D Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Maio 26, 2006 Denunciar Share Postado Maio 26, 2006 A forma como o Churc, colocou é a mais "econômica" em termos de espaço e mais prática sendo normalmente conhecida como CSV (Comma Separated Value - valor separado por vírgula), aqui o Churc utilizou um ponto-e-vírgula. Já a opção que você postou, pelo modo de leitura do txt, é a "menos econômica" - os valores são armazenados com tamanhos fíxos o que torna a leitura mais simples, mas tem o inconveniente de que o tamanho dos campos devem ser conhecidos. No seu exemplo, se for utilizado algum artifício para armazenar no txt os dados com o tamanho que você espera ler (observe que você concatenou os dados na gravação sem formatar o tamanho dos compos e, no entando, espera lê-los em posição e tamanhos fixos), você poderá utilizar a rotina de leitura como está implementada. O procedimento Write/Writeln permite que você formate a saída (veja help), de modo que utilizando :n (onde n é o tamanho do campo) logo após o conteúdo a ser impresso, ele será completado com espaços para completar o tamanho especificado. Assim, no procedimento em que você grava no arquivo txt acrescente a formatação e no procedimento que você lê o txt utilize o Trim para remover espaços extras colocados, conforme abaixo - teste:procedure TForm1.Button3Click(Sender: TObject); Var F: TextFile; begin ... Writeln(F, Table1.FieldByName('Codigo').Value:5, Table1.FieldByname('Nome').Value:20, Table1.FieldByname('Cidade').Value:10, Table1.FieldByname('uf').Value:2); Table1.Next; ... end; procedure TForm1.Button2Click(Sender: TObject); var Txt : TextFile; Entrada : String; begin ... Table1.Insert; Table1.FieldByName('Codigo').Value := Trim(Copy(Entrada,01,05)); Table1.FieldByName('Nome').Value := Trim(Copy(Entrada,06,20)); Table1.FieldByName('Cidade').Value := Trim(Copy(Entrada,26,10)); Table1.FieldByName('UF').Value := Trim(Copy(Entrada,36,02)); Table1.Post; ... end; Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Churc Postado Maio 26, 2006 Denunciar Share Postado Maio 26, 2006 Boa explicação Micheus ;)exatamente, CVS, utilizado por vários programas como pra exportar contatos do outlook uhahuaEder, está correto sim, da forma em que você estava fazendo, não havia definição do tamanho do campo, por isso saia tudo embaralhado exemplovou pegar uma linha conforme você passou:00003CARLOSTIMBOSCSeparando, e pegando a index de cada caracter*0 0 0 0 3 C A R L O S T I M B O S C 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18ai você fezTable1.FieldByName('Codigo').Value := Copy(Entrada, 1, 5);Perfeito, porque você sabe que o campo "Código" tem 5 caracteres, então você pegou do 1 ao 5, só não precisa do 0Ficando0 0 0 0 31 2 3 4 5Agora vem o problema, a linha salva no texto não indica de nenhum modo onde começa e onde termina o nome, e como nome não existe um número de caracteres exatos, então como você vai saber no meio de um monte de letras o nome de uma pessoa?Table1.FieldByName('Nome').Value := Copy(Entrada,6,20);ficando*0 0 0 0 3 C A R L O S T I M B O S C 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20Então usando delimitadores de campos, você extrai por completo cada valor que você queira, independente do seu tamanho...entendeu mais ou menos? huauah* o script não mostra do jeito que fiz, ele faz com que 2 espaços fique igual a 1 =\abraços Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Eder Postado Maio 26, 2006 Autor Denunciar Share Postado Maio 26, 2006 beleza..pessoal...ótima explicação....boa mesmofuncionou.....mas...só pra completardo TXT>>PARADOX ele colocou os registros na tabela paradox em ordem descrecente321COMO FARIA PRA COLOCAR NA ORDEM CORRETO (CRESCENTE)??e do PARADOX>>TXT ELE ALINHO A DIREITA O CONTEUDO 00001 EDERLI BLUMENAUSC00002 MARIO BRUSQUESC00003 CLAUDIO INDAIALSCE ESTE AQUI está CORRETO ASSIM??Beleza..pessoal..muito grato mesmo..aguardo..t+ Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Maio 27, 2006 Denunciar Share Postado Maio 27, 2006 COMO FARIA PRA COLOCAR NA ORDEM CORRETO (CRESCENTE)??sua tabela deve ter um índice para este campo (definida em ordem crescente) o qual deve estar selecionado utilizando a propriedade IndexName ou IndexFieldName (se estiver utilizando um TTable p.e.). Caso esteja utilizando um TQuery (ou similar), deve incluir a cláusula ORDER BY <campo desejado>.00001 EDERLI BLUMENAUSC00002 MARIO BRUSQUESC00003 CLAUDIO INDAIALSCE ESTE AQUI está CORRETO ASSIM??se você estiver utilizando o método que o Churc postou, então está correto (considerando que você concatenou cidade e uf), porém não aconselho utilizar o caraceter espaco como delimintador, visto que os nomes próprios podem conter este caracter e no momento da leitura, quando você porcura pelo delimitador, pode obter resultados inesperados.Já se estiver utilizando a abordagem de tamanho fixo que coloquei (utilizando ":" - que alinha pela direita) e considerando: código(5), nome(7), cidade(8) e uf(2), então observe que você deveria visualizar algo como:00001 EDERLIBLUMENAUSC 00002 MARIO BRUSQUESC 00003CLAUDIO INDAIALSC obs: apenas utilizando code (no editor aqui do site) é que os caracteres são mantidos do mesmo tamanho, facilitando a observação adequada.e do PARADOX>>TXT ELE ALINHO A DIREITA O CONTEUDOse você precisa de tamanho fixo e alinhado pela esquerda, então deverá fazer diferente. Deverá utilizar uma função que complete o texto até o tamanho desejado. Vou colocar uma aqui uma função que faz isto, caso você já não tenha uma:function FixeSize(Source :String; Size :Integer) :String; var SourceSize :Integer; begin Result := Copy(Source, 1, Size); // Trunca se for maior SourceSize := Length(Result); while SourceSize < Size do begin inc(SourceSize); Insert(' ', Result, SourceSize); end; end; daí, o seu código ficaria algo assim:procedure TForm1.Button3Click(Sender: TObject); Var F: TextFile; begin ... Writeln(F, FixeSize(Table1.FieldByName('Codigo').Value, 5), // use AsString caso Codigo seja numerico FixeSize(Table1.FieldByname('Nome').Value, 20), FixeSize(Table1.FieldByname('Cidade').Value, 10), FixeSize(Table1.FieldByname('uf').Value, 2)); Table1.Next; ... end; Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest Visitante Postado Maio 27, 2006 Denunciar Share Postado Maio 27, 2006 Beleza..Micheus.....ótima explicação.Carinha entendi perfeitamente...Agora mais uma pequena dúvida..como o db para o txt ficou assim: 00001 EDERLI BLUMENAUSC 00002 MARIO BRUSQUESC 00003 CLAUDIO INDAIALSCEU TE pergunto o seguinte:como eu passo pra uma empresa por exemplo que eu preciso de um arquivo TXT pra mim ler e passar pra paradox mas....que tenha que vir com este layout acima..entende ?? ou não...sei lá..o importante é que eu consiga pegar este TXT E passar pra um arquivo paradox.Neste caso eu teria que passar por exemplo um layout de como eu queria pra empresa??Como eu criaria este layout em cima deste exemplinho acima.??Não sei se fui claro!!muito Grato...se não fui claro por favor....de um toque que eu explico.Aguardo....e muito grato amigão....Haa....agora que eu notei você é de Blumenau heimm!!! eu também...t+ Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Maio 27, 2006 Denunciar Share Postado Maio 27, 2006 Como você pretende interagir com outra empresa utilizando arquivo com campos de tamanhos fíxos, o normal é utilizar os campos alinhados pela esquerda.Se você vai determinar como receberá estes dados, você pode optar ainda pelo uso do formato CSV.Neste caso eu teria que passar por exemplo um layout de como eu queria pra empresa??Sim, na verdade uma definição do layout e se possível um exemplo.Como eu criaria este layout em cima deste exemplinho acima.??Procurei na net e encontrei um exemplo deste tipo de definição -> link (role uma página para baixo no início).Haa....agora que eu notei você é de Blumenau heimm!!! eu também...t+Já havia notado. ;) Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Eder Postado Maio 28, 2006 Autor Denunciar Share Postado Maio 28, 2006 Beleza carinha...respondendo:Procurei na net e encontrei um exemplo deste tipo de definição -> link (role uma página para baixo no início).Dei uma analisada e fiz este layout em cima da pagina que você mandou verificar:ficou assim...vê se está certo dentro do exemplo que estamos discutindo:LAYOUT do Arquivo CLIENTES.TXT======================--------------------------------------------------------------------------- NO CAMPO--COLUNAS--TAMANHO--FORMATO--DESCRIÇÃO------ --------------------------------------------------------------------------- CODIGO......01 A 05 05 POS. 99999 CÓDIGO DE LANÇ. NOME..........06 A 25 20 POS. LIVRE NOME DO CLIENTE CIDADE.......26 A 35 10 POS LIVRE NOME DA CIDADE UF...............36 A 37 02 POS. LIVRE SIGLA DO ESTADO ---------------------------------------------------------------------------- CLIENTES.TXT ---------------- ---------------------------------------------------------------------------- INFORMAÇÃO----------------CI-------CF------EXEMPLO ----------------------------------------------------------------------------- CODIGO LANCAMENTO 01 05 99999 NOME 06 25 LIVRE P/ DIGITAÇÃO CIDADE 26 35 LIVRE P/ DIGITAÇÃO UF 36 37 LIVRE P/ DIGITAÇÃO O que você achou está certo??no caso tenho que montar um layout desses e passar para empresa montar o TXT??Bom acho que é isto...mas vou esperar um ok seut+...amigão..e muito grato novamente. :D Haaa..perdão pelo Layout ficar meio bagunçado ..não to conseguindo colocar alinhado...fica tudo bagunçado...coloquei como codigo mais não ficou alinhado...t+ Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Maio 28, 2006 Denunciar Share Postado Maio 28, 2006 Opção 1:---------------------------------------------------------------------- NO CAMPO--COLUNAS--TAMANHO--FORMATO--DESCRIÇÃO------ ---------------------------------------------------------------------- CODIGO... 01 A 05 05 POS. 99999 CÓDIGO DE LANÇ. NOME..... 06 A 25 20 POS. LIVRE NOME DO CLIENTE CIDADE... 26 A 35 10 POS LIVRE NOME DA CIDADE UF....... 36 A 37 02 POS. LIVRE SIGLA DO ESTADO ----------------------------------------------------------------------- Opção 2:----------------------------------------------------------------------- INFORMAÇÃO----------CI----CF-----FORMATO--------------EXEMPLO---------- ----------------------------------------------------------------------- CODIGO LANCAMENTO 01 05 99999 00310 NOME 06 25 LIVRE P/ DIGITAÇÃO APOLÔNIO LIMA CIDADE 26 35 LIVRE P/ DIGITAÇÃO BLUMENAU UF 36 37 LIVRE P/ DIGITAÇÃO SCAcho que a 2ª opção fica mais clara e mais parecida com as do exemplo da DataPrev.no caso tenho que montar um layout desses e passar para empresa montar o TXT??Sim e acho que deve fazê-lo em documento apropriado explicando como interpretar tais informações, como ocorre no referido link (O formato dos arquivos para a importação segue uma regra muito simples. Cada informação deve...)[]sp.s. O macete para linhar o texto utilizando code é contar as posições na mão - não adianta alinhar na tela pois o fonte do editor não tem tamanho fixo - por isso ainda ficou bagunçado. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Eder Postado Maio 29, 2006 Autor Denunciar Share Postado Maio 29, 2006 Beleza..Micheus...compreendido.muito Grato por toda esta ajuda....Obrigado também ao nosso colega Churc.t+...e até ...... ;) Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Eder Postado Janeiro 25, 2007 Autor Denunciar Share Postado Janeiro 25, 2007 Colega Churc.....eu tou tentando usar o seu codigo para converter *.csv para paradoxprocedure TForm1.Button1Click(Sender: TObject);varTxt : TextFile;Entrada : String;beginAssignfile(Txt,'c:\sswrel\Clientes.csv');Reset(Txt);While not Eoln(Txt) dobeginReadln(Txt,Entrada);Table1.Insert;Table1.FieldByName('Codigo').Value := Copy(Entrada,1,Pos(PathSep, Entrada) - 1);Delete(Entrada, 1, Pos(PathSep, Entrada));Table1.FieldByName('Nome').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);Delete(Entrada, 1, Pos(PathSep, Entrada));Table1.FieldByName('Cidade').Value := Copy(Entrada, 1, Pos(PathSep, Entrada) - 1);Delete(Entrada, 1, Pos(PathSep, Entrada));Table1.FieldByName('UF').Value := Copy(Entrada, 1, Length(Entrada));Table1.Post;end;CloseFile(Txt);Button3.Enabled := True;end;end;mas deu o seguinte erro:[Error] Unit1.pas(40): Undeclared identifier: 'PathSep' :unsure: Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Churc Postado Janeiro 25, 2007 Denunciar Share Postado Janeiro 25, 2007 opaPathSep está declarado em SysUtils, adicione emuses SysUtils;mas nada mais nada menos PathSep é issoconst PathSep = ';';abraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Eder Postado Janeiro 25, 2007 Autor Denunciar Share Postado Janeiro 25, 2007 Ok...Churc...mas era isto que eu tinha feito mas o erro persiste:uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Db, DBTables;meu delphi é 4 :unsure: Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Churc Postado Janeiro 25, 2007 Denunciar Share Postado Janeiro 25, 2007 opaentão, adicione ai lá depois de usesconstPathSep = ';';Mas você não precisa especificamente usar isso vocêpode definir qualquer coisa contanto que o que vocêdefinir nunca tenha nos textos senão da confusão exemploconstPathSep = '›'; //Esse caracter se faz com Alt + 0155Você pode mudar o nome também não precisa ser PathSepSeparacao = '›';Quando eu disse que o caracter de separação não podeconter no texto é pelo seguinte, vamos supor que vocêcoloque uma vírgula de separação, ai na hora de cadastrarpor exemplo uma empresa no seu programa, o usuáriocoloque uma vírgulaFICAP, ELECABO que vai acontecer, é que na hora de exportar ou importaro CSV o programa vai entender que a virgula é uma separação...Então por isso coloque caracteres que jamais vão conter noseu BD tipo esse Alt + 0155...Entendeu mais ou menos?abraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Eder Postado Janeiro 25, 2007 Autor Denunciar Share Postado Janeiro 25, 2007 Charc...aquelinha errinha saiu..mas não está dando certo...Eu tenho um *.CSV e quero criar um paradox com os dados que tem nele(cadastro de clientes).ai tou usando este codigo abaixo:procedure TForm1.Button1Click(Sender: TObject);varTxt : TextFile;Entrada : String;beginAssignfile(Txt,'c:\sswrel\Clientes.csv');Reset(Txt);While not Eoln(Txt) dobeginReadln(Txt,Entrada);Table1.Insert;Table1.FieldByName('Codigo').Value := Copy(Entrada,1,Pos(PathSep, Entrada) - 1);Delete(Entrada, 1, Pos(PathSep, Entrada));Table1.FieldByName('Nome').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);Delete(Entrada, 1, Pos(PathSep, Entrada));Table1.FieldByName('Cidade').Value := Copy(Entrada, 1, Pos(PathSep, Entrada) - 1);Delete(Entrada, 1, Pos(PathSep, Entrada));Table1.FieldByName('UF').Value := Copy(Entrada, 1, Length(Entrada));Table1.Post;end;CloseFile(Txt);Button3.Enabled := True;end;end;Coloquei o caminho como vê acima aonde esta o clientes.csvmas da erro, acredito que não tou fazendo a coisa correta....Na verdade na hora que tento converter CSV pro DB eu teria que criar o *.DB do zero...pois ele ainda não existe.Pra compreender melhor ...Por acaso tens um exemplinho num *.zip para colocar como demonstração aqui??Grato :unsure: Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Eder Postado Janeiro 25, 2007 Autor Denunciar Share Postado Janeiro 25, 2007 Churc......Tentei aqui...e agora deu certo....ele passou dados pro paradox..porem tem campos que pegou dados misturaro..ou seja...o campo endereço do paradox pegou dados do campo bairroassim:rua jose de silva, 125 ;Sumarerua maria peres, 2052 ;asiloviu acima...no endereço apareceu o endereço mais bairro......aconteceu também e mais dois campos assim de sair misturado....estranho né...pois no csv está certo..separadinho.... :unsure: Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Churc Postado Janeiro 25, 2007 Denunciar Share Postado Janeiro 25, 2007 opaSe puder me mande uma cópia de sua tabela quevocê quer exportar pra CSV, pode ser com apenas5 registros apenas pra testes...Depois eu te mando um exemplo exportando e importando...cebasso@nospam.gmail.comtira o nospam fora senão esses bot vão pegar meu emaile encher eu de spam suhaahusabraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Eder Postado Janeiro 29, 2007 Autor Denunciar Share Postado Janeiro 29, 2007 Valeu Churc..... ficou assim:na verdade ele desconsiderou as 4 primeiras linhas(nome do relatorio...periodo etc...) deixando apenas os dados puros...ai deu certo....valeu...muito grato pela ajuda...abaixo o codigo como ficou procedure TForm1.Button5Click(Sender: TObject); var Txt: TextFile; Entrada: String; Linhas: Integer; begin TABLE1.Active:=TRUE; Assignfile(Txt,'c:\sswrel\ssw0176.csv'); Reset(Txt); Linhas := 0; While not Eoln(Txt) do begin Readln(Txt,Entrada); Inc(Linhas); if Linhas > 4 then begin Table1.Insert; Table1.FieldByName('C').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1); Delete(Entrada, 1, Pos(PathSep, Entrada)); Table1.FieldByName('cliente').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1); Delete(Entrada, 1, Pos(PathSep, Entrada)); Table1.FieldByName('Cnpj/cpf').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1); Delete(Entrada, 1, Pos(PathSep, Entrada)); Table1.FieldByName('endereco').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1); Delete(Entrada, 1, Pos(PathSep, Entrada)); Table1.FieldByName('bairro').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1); Delete(Entrada, 1, Pos(PathSep, Entrada)); Table1.FieldByName('cep').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1); Delete(Entrada, 1, Pos(PathSep, Entrada)); Table1.FieldByName('fone').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1); Delete(Entrada, 1, Pos(PathSep, Entrada)); Table1.FieldByName('cidade').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1); Delete(Entrada, 1, Pos(PathSep, Entrada)); Table1.FieldByName('uf').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1); Delete(Entrada, 1, Pos(PathSep, Entrada)); Table1.FieldByName('inclusao').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1); Delete(Entrada, 1, Pos(PathSep, Entrada)); Table1.FieldByName('inscr.').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1); Table1.Post; end; end; CloseFile(Txt); end; :D Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Churc Postado Janeiro 29, 2007 Denunciar Share Postado Janeiro 29, 2007 opaque bom cara :Dsó um detalhe, a parte de inscrição estadual, por sero último registro ele não contém em seu final um ; (PathSep)então acho que o mais correto éTable1.FieldByName('inscr.').Value := Copy(Entrada,1, Length(Entrada));abraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Eder Postado Janeiro 29, 2007 Autor Denunciar Share Postado Janeiro 29, 2007 Table1.FieldByName('inscr.').Value := Copy(Entrada,1, Length(Entrada));Carinha...era isto não tava dando certo...tava desde manhã tentando eu não sabia porque.....beleza agora deu tudo certinho fechou,.....Valeu a dica...Mas porque tenho que usar o Length ao invez do PathSep??Valeu muito agradecidot+ Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Churc Postado Janeiro 30, 2007 Denunciar Share Postado Janeiro 30, 2007 opaMas porque tenho que usar o Length ao invez do PathSep??Seguinte...A função Pos retorna a posição(Index) do que for passado nos parâmetros, por exemplovar x: String; i: Integer; begin x := 'Brasil'; 123456 Sendo assim i := Pos('s', x]; Então i = 4No seu caso você tinha uma linha exemploC;NOME DO CLIENTE;08.211.298/0001-90;ENDEREÇO ;BAIRRO ;78643000;( ) ;QUERENCIA ;muito;31/10/2006;133229963Repare que inscrição estadual é o último campo...o que ficaria depois de passar pelo delete: 133229963Você tava fazendoTable1.FieldByName('inscr.').Value := Copy(Entrada,1, Pos(PathSep, Entrada) - 1);Ueh mais cade o Pathsep nisso: 133229963 ?Não tem, daria certo se fosse isso: 133229963;Sendo assim a função Pos retornava uma index = -1 eassim como não existe index -1 significa que não encontroue por isso não copiava...Então a função Length retorna o tamanho total de uma string,ou seja, quantos caracteres tem... então dando o Copy vocêvai estar copiando do caracter 1 até o tamanho total da string...Resumindo copia ela toda...O que você tem que entender éCopy(String, X, Y);X = Qual caracter você quer começar copiar, se você colocar 1 elecomeça copiando desde a primeira letra, se colocar 2 ele copia desdea segunda e assim por diante...Y = A quantidade de caracter que você quer copiar a partir do X ou sejavamos supor que você quer copiar da palavra Churc só o urcentão seriaCopy('Churc', 3, 2);ouCopy('Churc', 3, Length('Churc'));vai dar na mesma, porque ele vai começar a copiar a partir da letra uque é a index número 3 e vai contar mais 5 caracteres, mas como não existemais cinco caracteres a partir da letra u então ele copia até a última letra...entendeu mais ou menos?abs Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Janeiro 30, 2007 Denunciar Share Postado Janeiro 30, 2007 Isso é que é explicação Churc... :D Uma opção que utilizo, quando o processo é automatizado utilizando uma função para extrair cada campo levando em conta apenas o delimitador, é concatenar um delimitador ao final da string:... Readln(Txt, Entrada); Entrada := Entrada +';'; TabNOMECampo1.AsString := GetParam(Entrada, 1); TabNOMECampo2.AsString := GetParam(Entrada, 2); ...Abraços Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest Visitante Postado Janeiro 30, 2007 Denunciar Share Postado Janeiro 30, 2007 Churc....Poxa valeu a explicação....não tem como não ENTENDER..ficou show.......juro que no começo da explicação até o meio não tava intendendo direito mais até o fim......ai ficou 100%....entendi tudinho....Cara.....você tem o dom de ensinar....Parabenz...concordo com o Conterânio Micheus. Excente explicação :D Valeu..Churc.....muito Grato Mesmo...Valeu também Micheus...inté colegas. :D Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Churc Postado Janeiro 31, 2007 Denunciar Share Postado Janeiro 31, 2007 opasauhasu valeu... pelo menos deu pra entender né rsros dom de ensinar tem o Micheus que escreveum livro em cada post dele kkk eu só "tento" explicar rsrmas valeu ai e que bom que deu certo! :Dabraço 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.