GARANTIR DESCONTO

Fórum Arquivo TXT - Tabulado #378038

21/05/2010

0

Bom dia a todos
Caros, preciso criar um arquivo TXT baseado em uma tabela access, (PRODUTOS), Conexão e Criar o arquivo eu sei fazer o que não estou conseguindo é gerar no formato especifico: Meu código:assignFile(arq,'\PRODUTOS_AR.txt');
rewrite(arq);
tabela.open;
tabela.first;
while not tabela.eof do begin
write (arq, tabela.fieldByName('p_iditg').asString);
write (arq, tabela.fieldByName('p_cod').asString);
write (arq, tabela.fieldByName('p_des').asString);
writeLn(arq);
tabela.next;
end;
closeFile(arq);

Layout do arquivo:Campo    TIPO TAM    Posição    Comentários
-----    ---- ----  ---------   ---------------------------------------------------------
P_IDITG   C    15     1 a  15   Código de integração [Código de integração]
P_ID      C    10    16 a  25   Código interno do produto [Código Interno]
P_COD     C    14    26 a  39   Código de venda do produto [Código de Venda]
P_DES     C    60    40 a  99   Descrição [Descrição]
P_UND     C     2   100 a 101   Unidade [Unidade]

Alguem poderia me ajudar,

Grande abraço a todos
Arildo Augusto

Arildo Augusto

Responder

Posts

21/05/2010

Villatore Ltda

Bom acho que vai te ajudar vc pode preencher com espaços  ex:


assignFile(arq,'\PRODUTOS_AR.txt');
     rewrite(arq);
     tabela.open;
     tabela.first;
     while not tabela.eof do begin
write (arq, PreencheBrancosDireita(tabela.fieldByName('p_iditg').asString,15));
write (arq, PreencheBrancosDireita(tabela.fieldByName('p_cod').asString,10));
write (arq, PreencheBrancosDireita(tabela.fieldByName('p_des').asString,14));
...
        writeLn(arq);
        tabela.next;
     end;
     closeFile(arq);




função


{Prenche, à direita, com espaco  até o tamanho total "N"}
Function PreencheBrancosDireita(Varia :ShortString; N : Byte) : ShortString;
begin
   if N > Length(Varia) Then
     begin
        PreencheDireita := Varia + Copies (' ', N - Length(Varia));
     end
   else
      begin
         PreencheDireita := Copy (Varia, 1, N);
      end;
end;




espero ter ajudado

Responder

Gostei + 0

21/05/2010

Villatore Ltda

Bom acho que vai te ajudar vc pode preencher com espaços  ex:


assignFile(arq,'\PRODUTOS_AR.txt');
     rewrite(arq);
     tabela.open;
     tabela.first;
     while not tabela.eof do begin
write (arq, PreencheBrancosDireita(tabela.fieldByName('p_iditg').asString,15));
write (arq, PreencheBrancosDireita(tabela.fieldByName('p_cod').asString,10));
write (arq, PreencheBrancosDireita(tabela.fieldByName('p_des').asString,14));
...
        writeLn(arq);
        tabela.next;
     end;
     closeFile(arq);




função


{Prenche, à direita, com espaco  até o tamanho total "N"}
Function PreencheBrancosDireita(Varia :ShortString; N : Byte) : ShortString;
begin
   if N > Length(Varia) Then
     begin
        PreencheDireita := Varia + Copies (' ', N - Length(Varia));
     end
   else
      begin
         PreencheDireita := Copy (Varia, 1, N);
      end;
end;




espero ter ajudado





corrigindo



função


{Prenche, à direita, com espaco  até o tamanho total "N"}
Function PreencheBrancosDireita(Varia :ShortString; N : Byte) : ShortString;
begin
   if N > Length(Varia) Then
     begin
        PreencheBrancosDireita:= Varia + Copies (' ', N - Length(Varia));
     end
   else
      begin
         PreencheBrancosDireita:= Copy (Varia, 1, N);
      end;
end;






Responder

Gostei + 0

21/05/2010

Arildo Augusto

Pessoal
Me desculpem,  esqueci de citar que no arquivo txt gerado, alguns campos precisam ser preenchidos com zeros a esquerda, conforme exemplo abaixo:
0000000009280 00000000009280TUBO PRETO 11/2X6 DIN 2440 PC  
0000000000100 00000000000100CONDUITE POLIETILENO 3/4"9 MT  
0000000001000 00000000001000DISJUNTOR BIP 50A L&C      PC
0000000001001 00000000001001EMENDA U PERFURADA 150X100 PC


Responder

Gostei + 0

21/05/2010

Wilson Junior

Responder

Gostei + 0

21/05/2010

Villatore Ltda

Pessoal
Me desculpem,  esqueci de citar que no arquivo txt gerado, alguns campos precisam ser preenchidos com zeros a esquerda, conforme exemplo abaixo:
0000000009280 00000000009280TUBO PRETO 11/2X6 DIN 2440 PC  
0000000000100 00000000000100CONDUITE POLIETILENO 3/4"9 MT  
0000000001000 00000000001000DISJUNTOR BIP 50A L&C      PC
0000000001001 00000000001001EMENDA U PERFURADA 150X100 PC





mesma coisa amigo


Function PreencheZeroEsquerda(Varia :ShortString; N : Byte) : ShortString;
begin
   if N > Length(Varia) Then
     begin
        PreencheZeroEsquerda := Copies ('0', N - Length(Varia)) + Varia;
      end
   else
      begin
         PreencheZeroEsquerda := Copy (Varia, Length(Varia) - N + 1, N);
      end;

end;

Responder

Gostei + 0

21/05/2010

Arildo Augusto

Pessoal  Infelizmente não esta gerando como deveria, vejam abaixo o layout e um exemplo de como precisa ficar o arquivo gerado: Da forma como me passaram eu não entendi, como saber em que posição de coluna estou escrevendo no TXT?
Layout do arquivo:

Campo TIPO TAM Posição Comentários
----- ---- ---- --------- ---------------------------------------------------------
P_IDITG C 15 1 a 15 Código de integração [Código de integração]
P_ID C 10 16 a 25 Código interno do produto [Código Interno]
P_DES C 60 40 a 99 Descrição [Descrição]
P_UND C 2 100 a 101 Unidade [Unidade]

Exemplo de como deverá ficar o arquivo gerado
0000000009280 00000000009280 TUBO PRETO 11/2X6 DIN 2440 PC
0000000000100 00000000000100 CONDUITE POLIETILENO 3/4"9 MT
0000000001000 00000000001000 DISJUNTOR BIP 50A L&C PC
0000000001001 00000000001001 EMENDA U PERFURADA 150X100 PC

Ou seja: no TXT o código deve ficar entre as posições 1 até 15, como o código é 9280, devemos preencher antes com zeros ja que o campo na tabela possui 15 caracteresA Descrição ficaria entre a posição 40 até 99 porem não precisa ser preenchida com zeros apenas espaços no final ja que o campo da tabela possui 60 caracteres
Espero ter esclarecido
Responder

Gostei + 0

21/05/2010

Wilson Junior

Utilizando os procediementos do link que passei no posto anterior

write (arq, ColocaTextoDir(tabela.FieldByName('p_iditg').AsString,
 15, '0') ); // 1 a 15
write 
(arq, ColocaTextoDir(tabela.FieldByName('p_cod').AsString,
 10, '0')); // 16 a 25
write 
(arq, ColocaTextoEsq('', 14, ' ') ); // 26 a 39
write (arq, ColocaTextoEsq(tabela.fieldByName('p_des').AsString,
 60, ' ') ); //40 a 99


Qualçquer coisa é só perguntar.
Espero ter colaborado.
Responder

Gostei + 0

21/05/2010

Arildo Augusto

"Paulista"
Se eu te falar que ficou 11 ao invés de 10 voce acredita?,   entaum,, ficou muito bom, funcionou direitinho Muito Obrigado caro colegaMuito obrigado mesmo,
Agradeço a todos que tentaram me ajudar
Fiquem com DEUS

Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar