Fórum Arquivo TXT - Tabulado #378038
21/05/2010
0
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
Curtir tópico
+ 0Posts
21/05/2010
Villatore Ltda
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
Gostei + 0
21/05/2010
Villatore Ltda
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;
Gostei + 0
21/05/2010
Arildo Augusto
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
Gostei + 0
21/05/2010
Wilson Junior
Espero ter colaborado.
Gostei + 0
21/05/2010
Villatore Ltda
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;
Gostei + 0
21/05/2010
Arildo Augusto
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
Gostei + 0
21/05/2010
Wilson Junior
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.
Gostei + 0
21/05/2010
Arildo Augusto
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
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)