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

tipo,

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 + 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 tipo

00001;JOSE;BRUSQUE;SC

00002;MARIA;INDAIAL;SC

00003;CARLOS;TIMBO;SC

ai pra ler

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,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 delphi

abraços

Link para o comentário
Compartilhar em outros sites

  • 0

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 termina

exemplo: Entrada,01,05);

grato...fico no aguardo..amigão.

:D

Link para o comentário
Compartilhar em outros sites

  • 0

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;

Link para o comentário
Compartilhar em outros sites

  • 0

Boa explicação Micheus ;)

exatamente, CVS, utilizado por vários programas como pra exportar contatos do outlook uhahua

Eder, está correto sim, da forma em que você estava fazendo, não havia definição do tamanho do campo, por isso saia tudo embaralhado exemplo

vou pegar uma linha conforme você passou:

00003CARLOSTIMBOSC

Separando, 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 18

ai você fez

Table1.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 0

Ficando

0 0 0 0 3

1 2 3 4 5

Agora 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 20

Entã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

Link para o comentário
Compartilhar em outros sites

  • 0

beleza..pessoal...ótima explicação....boa mesmo

funcionou.....mas...só pra completar

do TXT>>PARADOX ele colocou os registros na tabela paradox em ordem descrecente

3

2

1

COMO FARIA PRA COLOCAR NA ORDEM CORRETO (CRESCENTE)??

e do PARADOX>>TXT ELE ALINHO A DIREITA O CONTEUDO

00001 EDERLI BLUMENAUSC

00002 MARIO BRUSQUESC

00003 CLAUDIO INDAIALSC

E ESTE AQUI está CORRETO ASSIM??

Beleza..pessoal..muito grato mesmo..aguardo..t+

Link para o comentário
Compartilhar em outros sites

  • 0
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 BLUMENAUSC

00002 MARIO BRUSQUESC

00003 CLAUDIO INDAIALSC

E 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 CONTEUDO
se 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;

Link para o comentário
Compartilhar em outros sites

  • 0
Guest Visitante

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    INDAIALSC

EU 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+

Link para o comentário
Compartilhar em outros sites

  • 0

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. ;)
Link para o comentário
Compartilhar em outros sites

  • 0

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 seu

t+...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+

Link para o comentário
Compartilhar em outros sites

  • 0

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   SC

Acho 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...)

[]s

p.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.

Link para o comentário
Compartilhar em outros sites

  • 0

Colega Churc.....eu tou tentando usar o seu codigo para converter *.csv para paradox

procedure TForm1.Button1Click(Sender: TObject);

var

Txt : TextFile;

Entrada : String;

begin

Assignfile(Txt,'c:\sswrel\Clientes.csv');

Reset(Txt);

While not Eoln(Txt) do

begin

Readln(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:

Link para o comentário
Compartilhar em outros sites

  • 0

opa

então, adicione ai lá depois de uses

const

PathSep = ';';

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 exemplo

const

PathSep = '›'; //Esse caracter se faz com Alt + 0155

Você pode mudar o nome também não precisa ser PathSep

Separacao = '›';

Quando eu disse que o caracter de separação não pode

conter no texto é pelo seguinte, vamos supor que você

coloque uma vírgula de separação, ai na hora de cadastrar

por exemplo uma empresa no seu programa, o usuário

coloque uma vírgula

FICAP, ELECAB

O que vai acontecer, é que na hora de exportar ou importar

o CSV o programa vai entender que a virgula é uma separação...

Então por isso coloque caracteres que jamais vão conter no

seu BD tipo esse Alt + 0155...

Entendeu mais ou menos?

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

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);

var

Txt : TextFile;

Entrada : String;

begin

Assignfile(Txt,'c:\sswrel\Clientes.csv');

Reset(Txt);

While not Eoln(Txt) do

begin

Readln(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.csv

mas 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:

Link para o comentário
Compartilhar em outros sites

  • 0

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 bairro

assim:

rua jose de silva, 125 ;Sumare

rua maria peres, 2052 ;asilo

viu 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:

Link para o comentário
Compartilhar em outros sites

  • 0

opa

Se puder me mande uma cópia de sua tabela que

você quer exportar pra CSV, pode ser com apenas

5 registros apenas pra testes...

Depois eu te mando um exemplo exportando e importando...

cebasso@nospam.gmail.com

tira o nospam fora senão esses bot vão pegar meu email

e encher eu de spam suhaahus

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

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

Link para o comentário
Compartilhar em outros sites

  • 0

opa

que bom cara :D

só um detalhe, a parte de inscrição estadual, por ser

o ú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

Link para o comentário
Compartilhar em outros sites

  • 0

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 agradecido

t+

Link para o comentário
Compartilhar em outros sites

  • 0

opa

Mas 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 exemplo

var
  x: String;
  i: Integer;
begin
 x := 'Brasil';
      123456

Sendo assim

  i := Pos('s', x];

Então i = 4

No seu caso você tinha uma linha exemplo

C;NOME DO CLIENTE;08.211.298/0001-90;ENDEREÇO ;BAIRRO ;78643000;( ) ;QUERENCIA ;muito;31/10/2006;133229963

Repare que inscrição estadual é o último campo...

o que ficaria depois de passar pelo delete: 133229963

Você tava fazendo

Table1.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 e

assim como não existe index -1 significa que não encontrou

e 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 ele

começa copiando desde a primeira letra, se colocar 2 ele copia desde

a segunda e assim por diante...

Y = A quantidade de caracter que você quer copiar a partir do X ou seja

vamos supor que você quer copiar da palavra Churc só o urc

então seria

Copy('Churc', 3, 2);

ou

Copy('Churc', 3, Length('Churc'));

vai dar na mesma, porque ele vai começar a copiar a partir da letra u

que é a index número 3 e vai contar mais 5 caracteres, mas como não existe

mais cinco caracteres a partir da letra u então ele copia até a última letra...

entendeu mais ou menos?

abs

Link para o comentário
Compartilhar em outros sites

  • 0

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

Link para o comentário
Compartilhar em outros sites

  • 0
Guest Visitante

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

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,8k
×
×
  • Criar Novo...