de Txt para Firebird
Ola
Pessoal, :D
to tentando importar as informações de um arquvo txt
para um banco de Dados em Firebird
Bom o Meu problema está em copiar do txt
as informações que estão entre barra |
por Exemplo o txt esta assim
1|1|1|123|56A1|1|...
1|1|2|123|56A2|1|...
1|1|3|123|56A3|1|...
1|2|1|124|56A1|1|...
102|1|1|123|56A2|1|...
10|1|1|123|56A2|1|...
1012|1|1|123|56A2|1|...
e assim por diante.
Pergunta, como faço para pegar a posição da proxima Barra |,
sendo que a função pos me retorna apenas a primeira barra. :?:
Desde já Agradeço a atenção de Todos. :wink:
Pessoal, :D
to tentando importar as informações de um arquvo txt
para um banco de Dados em Firebird
Bom o Meu problema está em copiar do txt
as informações que estão entre barra |
por Exemplo o txt esta assim
1|1|1|123|56A1|1|...
1|1|2|123|56A2|1|...
1|1|3|123|56A3|1|...
1|2|1|124|56A1|1|...
102|1|1|123|56A2|1|...
10|1|1|123|56A2|1|...
1012|1|1|123|56A2|1|...
e assim por diante.
Pergunta, como faço para pegar a posição da proxima Barra |,
sendo que a função pos me retorna apenas a primeira barra. :?:
Desde já Agradeço a atenção de Todos. :wink:
Wagnerps
Curtidas 0
Respostas
Basilio.sp
21/07/2003
Caro wagnerps,
Incrível! Este arquivo é idêntico a um que gero pra uma grande rede varejista...
Vamos lá...
Como o POS só nos retorna a posição do primeiro delimitador, costumo fazer o seguinte: obtenho a posição do primeiro delimitador -1, extraio o q preciso, deleto a string até a posição do delimitador e repito o processo.
Como utilizo muito arquivos textos com tudo quanto é tipo de delimitador, criei a função que listo abaixo. É necessário que o arquivo tenha um delimitador no final de cada linha para que a função funcione corretamente (mas você pode adaptar o código...).
Para utiliza-la, vamos considerar que voce esteja lendo as linhas do arquivo texto em uma variável chamada txtLine, utilizando o separador pipe (´|´) e queira extrair o primeiro campo na variável BANCO e o segundo em COD_CLI. Bastaria fazer o seguinte:
BANCO := RetornaCampo (txtLine, ´|´, 1);
COD_CLI := RetornaCampo (txtLine, ´|´, 2);
---
Function RetornaCampo (const strField: String; const Separador: Char; const FieldNo: Integer): ShortString;
var
Posicao : Integer;
Contador: Integer;
Retorno : String;
TEMPOR : String;
begin
TEMPOR := strField;
For Contador := 1 to FieldNo do
Begin
Retorno := Copy (TEMPOR, 1, Pos (Separador, TEMPOR) -1);
TEMPOR := Copy (TEMPOR, Pos (Separador, TEMPOR) + 1, Length (TEMPOR));
end;
Result := Retorno;
end;
---
Incrível! Este arquivo é idêntico a um que gero pra uma grande rede varejista...
Vamos lá...
Como o POS só nos retorna a posição do primeiro delimitador, costumo fazer o seguinte: obtenho a posição do primeiro delimitador -1, extraio o q preciso, deleto a string até a posição do delimitador e repito o processo.
Como utilizo muito arquivos textos com tudo quanto é tipo de delimitador, criei a função que listo abaixo. É necessário que o arquivo tenha um delimitador no final de cada linha para que a função funcione corretamente (mas você pode adaptar o código...).
Para utiliza-la, vamos considerar que voce esteja lendo as linhas do arquivo texto em uma variável chamada txtLine, utilizando o separador pipe (´|´) e queira extrair o primeiro campo na variável BANCO e o segundo em COD_CLI. Bastaria fazer o seguinte:
BANCO := RetornaCampo (txtLine, ´|´, 1);
COD_CLI := RetornaCampo (txtLine, ´|´, 2);
---
Function RetornaCampo (const strField: String; const Separador: Char; const FieldNo: Integer): ShortString;
var
Posicao : Integer;
Contador: Integer;
Retorno : String;
TEMPOR : String;
begin
TEMPOR := strField;
For Contador := 1 to FieldNo do
Begin
Retorno := Copy (TEMPOR, 1, Pos (Separador, TEMPOR) -1);
TEMPOR := Copy (TEMPOR, Pos (Separador, TEMPOR) + 1, Length (TEMPOR));
end;
Result := Retorno;
end;
---
GOSTEI 0