Uma excelente forma de se trabalhar a exportação e importação de dados é através de arquivos no formato TXT, pois são arquivos leves e de processamento rápido.

Uma maneira muito usada para formatar estes arquivos é através de faixa de dados entre colunas do arquivo, por exemplo: Código = posição 1 a 8, Nome =  posição 9 a 48, Endereço = posição 49 a 70, e assim por diante.

 

Atualmente vem sendo cada vez mais usada outra forma de formatar estes arquivos. Esta forma é através de separação dos diversos dados do arquivo usando um caractere especial que normalmente é o pipe “|”. Veja o exemplo de como fica o arquivo:

 

000001|FULANO DE TAL|RUA PRINCIPAL, S/N|CENTRO|UMA CIDADE|MT|000000-000|0,00|

000002|CICLANO DA SILVA|RUA VINTE E DOIS, 525|PLANALTO|CIDADE DE CIMA|SP|12.123-678|28,35|

000003|BELTRAME JOSE DIAS|AVENIDA DOIS, 1252|SÃO PAULO| CIDADE DE LA|RJ|01010-010|2,58|

 

A meu ver essa segunda opção e muito melhor para se trabalhar, pois dispensa o uso de layout, que dependendo da quantidade de informações fica bem maçante, e defini-se apenas a sequencia dos dados.

E principalmente por flexibilizar o tamanho dos campos, saindo da regra de layout que determina tamanhos máximos para os campos, o que às vezes faz com que tenhamos que ajustar os dados do campo antes de gravar em arquivo.

 

Se observar a estrutura dos arquivos solicitados pelo fisco para atender ao SPED fiscal – ECD e EFD, veremos que é adotado este procedimento. Veja abaixo, trecho do registro 200 do bloco 0 de um arquivo EFD pronto.

 

|0200|26658|SALG.SUPER CLICK CEB. 60G-ALUMINIO|7896929600109||FD|00|19041000||00||0,00|

|0200|26688|BISCOITO PETYAN DOCE 2 KG|7896532700227||UN|00|19059020||00||12,00|

|0200|26690|BISCOITO PETYAN DOCE 400 GRS|7896532700265||UN|00|19059020||00||12,00|

|0200|26717|RACAO FIEL 15 KG|7896048901958||UN|00|23091000||00||0,00|

|0200|26769|PRESTACAO SERVICO|26769||UN|00|39262000||00||0,00|

|0200|26890|RACAO TOP CAT CARNE 10,1KG|7896048913623||UN|00|23091000||00||0,00|

|0200|26891|RACAO TOP CAT CARNE 25 KG|7896048912053||UN|00|23091000||00||0,00|

 

Segue abaixo os códigos de uma função que uso para efetuar a leitura dos dados do arquivo no momento de realizar a importação:

 

Function LeituraLinhaArquivo(Texto,Caracter: string; Posicao: Integer): string;

var aux:string;

       i, contador:integer;

begin

  // zera variaveis auxiliares

  aux := '';

  Result := '';

  contador := 0;

  // busca informações solicitadas no texto

  for i:=1 to length(fTexto) do

  begin

    if copy(Texto,i,1) <> Caracter then

      aux := aux + copy(Texto,i,1)

    else

    begin

      contador := contador + 1;

      if contador = Posicao then

         Break

      else

        aux := '';

    end;

  end;

  Result := aux;

 

end;

 

Nesta função eu passo a linha do arquivo, o caracter usado para separação dos dados e a posição que desejo capturar a informação. Veja o exemplo:

 

Linha do Arquivo

000001|FULANO DE TAL|RUA PRINCIPAL, S/N|CENTRO|UMA CIDADE|MT|000000-000|0,00|

 

Caractere de separação “|”

 

Posições do arquivo

Informação

Posição

000001

1

FULANO DE TAL

2

RUA PRINCIPAL, S/N

3

CENTRO

4

UMA CIDADE

5

MT

6

000000-000

7

0,00

8