ZEROS a esquerda
Moderador: Moderadores
ZEROS a esquerda
Amigos,
Depois de um tempo longe do fórum e claro longe da programação, voltei
O que estou precisando é o seguinte, vou gerar um arquivo TXT para importação em um programa e estou fazendo o programa que vai ser imputada as informações e depois vou gerar o TXT.
Neste TXT os campos numéricos tem que serem preenchidos sem . ou , e com zeros a esquerda.
Pensei primeiramente em criar o DBF como numerico sem casas decimais, mas que na tela de entrada o usuário consegui-se visualizar no formato @E 999.999,99.
Claro que não deu certo.. :(Neg ... esta indo pro DBF sem os centavos e muito menos com os zeros a esquerda.
Tem como fazer o acerto já no imput ou é melhor tratar na hora da geração do TXT ??
Abraços!
Depois de um tempo longe do fórum e claro longe da programação, voltei
O que estou precisando é o seguinte, vou gerar um arquivo TXT para importação em um programa e estou fazendo o programa que vai ser imputada as informações e depois vou gerar o TXT.
Neste TXT os campos numéricos tem que serem preenchidos sem . ou , e com zeros a esquerda.
Pensei primeiramente em criar o DBF como numerico sem casas decimais, mas que na tela de entrada o usuário consegui-se visualizar no formato @E 999.999,99.
Claro que não deu certo.. :(Neg ... esta indo pro DBF sem os centavos e muito menos com os zeros a esquerda.
Tem como fazer o acerto já no imput ou é melhor tratar na hora da geração do TXT ??
Abraços!
JLF - relembrando bons tempos
Clipper 5.3 - Blinker 7
Clipper 5.3 - Blinker 7
JLF,
Pode deixar, no DBF, o campo como numérico e com as decimais.
A função a seguir:
- multiplica o valor do campo por 100, aí as 2 casas decimais "somem"
- usa a função STRZERO() para completar com zeros à esquerda
As "máscaras" só formatam a apresentação, não alteram o conteúdo do campo ou variável. Exemplos:
Pode deixar, no DBF, o campo como numérico e com as decimais.
A função a seguir:
- multiplica o valor do campo por 100, aí as 2 casas decimais "somem"
- usa a função STRZERO() para completar com zeros à esquerda
Código: Selecionar todos
nCampo=1234.56 // numérico
?qqnome(nCampo,10) -> 0000123456
function qqnome(numero,tam)
novo=strzero(numero*100,tam,0)
retu novoAs "máscaras" só formatam a apresentação, não alteram o conteúdo do campo ou variável. Exemplos:
Código: Selecionar todos
numero=1234.56
@10,10 say tran(numero,"@E 999,999.99") -> 1.234,56
@10,10 say tran(numero,"@ 999,999.99") -> 1,234.56
@10,10 say strzero(numero*100,10,0) -> 0000123456
cnpj=11222333444455 // caracter, tamanho 14
@10,10 say tran(cnpj,"@R 99.999.999/9999-99") -> 11.222.333/4444-55
minuscula="abcdef"
@10,10 say tran(minuscula,"@!") -> "ABCDEF"
set date brit
set cent on
data=ctod("24/05/2007")
@10,10 say data -> 24/05/2007
set date amer
@10,10 say data -> 05/24/2007
set cent off
@10,10 say data -> 05/24/07 Desculpe a nossa falha...
No DBF, o campo deve ser numérico.
Quando for gerar o arquivo texto, vc deve usar o conjunto que eu postei.
? strtran(transform(<campo numerico>, '@E 99999.99'), ' ', '0')
No DBF, o campo deve ser numérico.
Quando for gerar o arquivo texto, vc deve usar o conjunto que eu postei.
? strtran(transform(<campo numerico>, '@E 99999.99'), ' ', '0')
"TRS-80/Sincler/Apple/PC - Clipper Winter 85, tlink 1.0 [pc 10 MHz - 640K] {NEZ 8000 2Kb RAM}"
{POG - Programação Orientada a Gambiarra}
{POG - Programação Orientada a Gambiarra}
-:]
Eolo, funcionou perfeitamente...Obrigado.
Grings, o que foi feito é o seguinte, tendo o campo valor(suponhamos tamanho 10 com 2 decimais) de 100,23 necessitava gerar ele para TXT no tamanho de 15 com zeros a esquerda, ou seja, tinha que ficar assim: 000000000010023.
A solução do Eolo foi melhor, o dado entra normal e tratei na hora de gerar o TXT.
Agora só estou tendo uma dificuldade na criação do arquivo TXT, é que devido ao padrão do programa que vai importar os dados do TXT o dito arquivo não tem um nome fixo e sim uma variavel OBRIGATÓRIA, em vez dele ser arquivo.TXT ele tem que ser arquivo.??
Após o (ponto) vem o mês a que se refere, até ai beleza criei uma variavel que le a data e pega o mes, fiz o teste em tela e carregou certo, porem na hora de gerar o arquivo não esta indo..segue o que estou fazendo:
vMes :=SUBSTR(C06,4,2)
@ 12,12 say vMes // aqui visualizei e esta certo
vEmp :="FI004004." // aqui o nome fixo
private hArquivo,;
arq :=STUFF(vEmp,9,0,vMes)
hArquivo := fCreate(arq,0)
Se puderem dar uma mão...

Eolo, funcionou perfeitamente...Obrigado.
Grings, o que foi feito é o seguinte, tendo o campo valor(suponhamos tamanho 10 com 2 decimais) de 100,23 necessitava gerar ele para TXT no tamanho de 15 com zeros a esquerda, ou seja, tinha que ficar assim: 000000000010023.
A solução do Eolo foi melhor, o dado entra normal e tratei na hora de gerar o TXT.
Agora só estou tendo uma dificuldade na criação do arquivo TXT, é que devido ao padrão do programa que vai importar os dados do TXT o dito arquivo não tem um nome fixo e sim uma variavel OBRIGATÓRIA, em vez dele ser arquivo.TXT ele tem que ser arquivo.??
Após o (ponto) vem o mês a que se refere, até ai beleza criei uma variavel que le a data e pega o mes, fiz o teste em tela e carregou certo, porem na hora de gerar o arquivo não esta indo..segue o que estou fazendo:
vMes :=SUBSTR(C06,4,2)
@ 12,12 say vMes // aqui visualizei e esta certo
vEmp :="FI004004." // aqui o nome fixo
private hArquivo,;
arq :=STUFF(vEmp,9,0,vMes)
hArquivo := fCreate(arq,0)
Se puderem dar uma mão...
JLF - relembrando bons tempos
Clipper 5.3 - Blinker 7
Clipper 5.3 - Blinker 7
JLF,
Se vc precisa só o MÊS com 2 dígitos ("01... 02... até 12"), faça o seguinte:
?HOJE=date() -> 24/05/2007
?arq="FI004004."+strzero(month(HOJE),2,0) -> "FI004004.05"
hArquivo := fCreate(arq,0)
etc.
?DATA=ctod("30/06/2007") -> 30/06/2007
?arq="FI004004."+strzero(month(DATA),2,0) -> "FI004004.06"
hArquivo := fCreate(arq,0)
etc.
Se vc precisa só o MÊS com 2 dígitos ("01... 02... até 12"), faça o seguinte:
?HOJE=date() -> 24/05/2007
?arq="FI004004."+strzero(month(HOJE),2,0) -> "FI004004.05"
hArquivo := fCreate(arq,0)
etc.
?DATA=ctod("30/06/2007") -> 30/06/2007
?arq="FI004004."+strzero(month(DATA),2,0) -> "FI004004.06"
hArquivo := fCreate(arq,0)
etc.
JLF, usar as funções de baixo nível é trabalhoso, é mais fácil vc direcionar o relatório para um arquivo ao invés da impresora, faça assim:
Set Printer On
Set Device To Printer
Set Printer To <nome do arquivo que vc quer criar>
Gere seu relatório com se fosse enviar para a impressora ...
@ x,y Say ......
Set Printer To
Set Printer Off
Set Device To Screen
Pronto, foi gerado o arquivo que vc quer.
Set Printer On
Set Device To Printer
Set Printer To <nome do arquivo que vc quer criar>
Gere seu relatório com se fosse enviar para a impressora ...
@ x,y Say ......
Set Printer To
Set Printer Off
Set Device To Screen
Pronto, foi gerado o arquivo que vc quer.
Amigos, Achei o problema na criação do nome do arquivo...super simples...o erro estava na posição inicial em vez de 9 o correto é 10, esqueci de contar o "ponto"...rsss
private hArquivo,;
arq :=STUFF(vEmp,9,0,vMes) arq :=STUFF(vEmp,10,0,vMes)
hArquivo := fCreate(arq,0)
Usei a rotina do Grings, mas não foi nada para o arquivo ele ficou VAZIO...
Onde estou errando? to compilando a rotina isoladamente com
clipper geratxt /n
blinker fi geratxt
Segue todo o código...se puderem me ajudar agradeço muito...
FUNCTION GeraTxt()
USE impcont
**************************************************************
* Cria o arquivo em formato TXT
*
vMes :=SUBSTR(C06,4,2)
vEmp :="FI004004."
private hArquivo,;
arq :=STUFF(vEmp,10,0,vMes)
hArquivo := fCreate(arq,0)
If hArquivo = -1
Alert('Erro na criacao do arquivo')
Return NIL
Endif
SET PRINT ON
SET DEVICE TO PRINTER
SET PRINT TO &hArquivo
Go TOP
* --- Inicio da pagina
cLinha := 1
WHILE !EOF()
* --- Linhas de detalhe do relatorio
@ cLinha,001 SAY c01
@ cLinha,006 SAY c02
@ cLinha,024 SAY c03
@ cLinha,042 SAY c04
@ cLinha,047 SAY strzero(c05*100,12,0)
@ cLinha,059 SAY c06
@ cLinha,069 SAY c07
@ cLinha,075 SAY c08
@ cLinha,181 SAY c09
@ cLinha,216 SAY c10
@ cLinha,218 SAY c11
@ cLinha,238 SAY c12
@ cLinha,258 SAY c13
@ cLinha,278 SAY strzero(c14*100,15,0)
@ cLinha,293 SAY c15
@ cLinha,313 SAY strzero(c16*100,15,0)
cLinha = cLinha + 1
SKIP
* ----- final
ENDDO
SET PRINTER TO
SET PRINT OFF
SET DEVICE TO SCREEN
RETURN NIL

private hArquivo,;
arq :=STUFF(vEmp,9,0,vMes) arq :=STUFF(vEmp,10,0,vMes)
hArquivo := fCreate(arq,0)
Usei a rotina do Grings, mas não foi nada para o arquivo ele ficou VAZIO...
Onde estou errando? to compilando a rotina isoladamente com
clipper geratxt /n
blinker fi geratxt
Segue todo o código...se puderem me ajudar agradeço muito...
FUNCTION GeraTxt()
USE impcont
**************************************************************
* Cria o arquivo em formato TXT
*
vMes :=SUBSTR(C06,4,2)
vEmp :="FI004004."
private hArquivo,;
arq :=STUFF(vEmp,10,0,vMes)
hArquivo := fCreate(arq,0)
If hArquivo = -1
Alert('Erro na criacao do arquivo')
Return NIL
Endif
SET PRINT ON
SET DEVICE TO PRINTER
SET PRINT TO &hArquivo
Go TOP
* --- Inicio da pagina
cLinha := 1
WHILE !EOF()
* --- Linhas de detalhe do relatorio
@ cLinha,001 SAY c01
@ cLinha,006 SAY c02
@ cLinha,024 SAY c03
@ cLinha,042 SAY c04
@ cLinha,047 SAY strzero(c05*100,12,0)
@ cLinha,059 SAY c06
@ cLinha,069 SAY c07
@ cLinha,075 SAY c08
@ cLinha,181 SAY c09
@ cLinha,216 SAY c10
@ cLinha,218 SAY c11
@ cLinha,238 SAY c12
@ cLinha,258 SAY c13
@ cLinha,278 SAY strzero(c14*100,15,0)
@ cLinha,293 SAY c15
@ cLinha,313 SAY strzero(c16*100,15,0)
cLinha = cLinha + 1
SKIP
* ----- final
ENDDO
SET PRINTER TO
SET PRINT OFF
SET DEVICE TO SCREEN
RETURN NIL
JLF - relembrando bons tempos
Clipper 5.3 - Blinker 7
Clipper 5.3 - Blinker 7
-
Dércio_Luiz_Zanatta
- Usuário Nível 3

- Mensagens: 153
- Registrado em: 11 Jan 2006 15:37
- Localização: Ibirubá - RS

