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 |