transform()

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Avatar do usuário
Netavin
Usuário Nível 3
Usuário Nível 3
Mensagens: 306
Registrado em: 28 Fev 2007 08:37
Localização: Cacoal-RO

transform()

Mensagem por Netavin »

Bom dia a todos!
... ainda de ressaca ?!
Quando voltarem a si novamente(rs), gostaria que me dessem informação a respeito do uso do transform(). Ocorre o seguinte: num total de coluna de valores, ora o resultado fica posicionado na coluna X, outra ora ele se posiciona na coluna Y. Varia de acordo com o tamanho do resultado...;
para um valor cujo total seja 10.000,00 ele se posiciona numa coluna; se o resultado é 100,00 ele se posiciona em outra coluna.
Como posso controlar isso ?

Boa folia para todos!

Grato!

Netavin
TK90 / TK95 / APPLE IIe / 286 / 386 / 486 / 586 / AMD Atlhon
" Sem saber que era impossível, foi lá e fez !! "
Avatar do usuário
Clipper
Colaborador
Colaborador
Mensagens: 1334
Registrado em: 23 Ago 2004 00:04
Localização: Recife/PE

Mensagem por Clipper »

Tá estranho isso !

Se você está usando da forma comum deveria sempre posicionar na mesma coluna.

@ 10,50 SAY TRANSFORM(VALTOT,"@E 999,999,999.99")

Como exatamente você está usando, tem algum TRIM, LTRIM ou outra função em uso conjunto ?

Até logo.

Marcelo
Programador que é programador, quando tá de folga vai inventar função nova, fazer testes, ou seja... se divertir
Cobra 210 - Drive de 8" 1.024 KB - 64 KB RAM - Impressora de Linha Cobra - Visicalc - Fortran - Dialog - Sistema Operacional SP/M (é sp/m mesmo - era o cp/m da cobra)
Avatar do usuário
Netavin
Usuário Nível 3
Usuário Nível 3
Mensagens: 306
Registrado em: 28 Fev 2007 08:37
Localização: Cacoal-RO

Mensagem por Netavin »

oi colega clipper.
Estou usando nos relatórios de impressão, assim:
? "total: " + transform(vari, "@e 99,999.999").

[]´s

Netavin
TK90 / TK95 / APPLE IIe / 286 / 386 / 486 / 586 / AMD Atlhon
" Sem saber que era impossível, foi lá e fez !! "
Avatar do usuário
Clipper
Colaborador
Colaborador
Mensagens: 1334
Registrado em: 23 Ago 2004 00:04
Localização: Recife/PE

Mensagem por Clipper »

Prezado colega

Eu nunca fui muito adepto do uso do ?, para saídas formatadas recomendo o uso do @ SAY, com ele não tem erro.

Mas o uso do TRANSFORM está correto teóricamente não deveria dar esse erro.

Até logo.

Marcelo
Programador que é programador, quando tá de folga vai inventar função nova, fazer testes, ou seja... se divertir
Cobra 210 - Drive de 8" 1.024 KB - 64 KB RAM - Impressora de Linha Cobra - Visicalc - Fortran - Dialog - Sistema Operacional SP/M (é sp/m mesmo - era o cp/m da cobra)
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Re: transform()

Mensagem por Maligno »

Netavin escreveu:para um valor cujo total seja 10.000,00 ele se posiciona numa coluna; se o resultado é 100,00 ele se posiciona em outra coluna.
Como posso controlar isso ?
Quando a impressão precisa ter uma largura fixa, pode-se usar a função PadL() com um valor de largura X, tal que, números convertidos e/ou strings formatadas com máscaras diferentes, com largura menor, ganham espaços adicionais à esquerda para terem a largura X especificada. Mais detalhes, procure pela função PAD() no NG.

Veja que isso serve para máscaras diversas. Se forem apenas números, uma forma mais fácil e prática é usar sempre a mesma máscara para a conversão.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
gvc
Colaborador
Colaborador
Mensagens: 1270
Registrado em: 23 Ago 2005 10:57

Mensagem por gvc »

Pode ser assim tb:
@ 10,50 SAY valtot picture "@E 999,999,999.99"

O padr / padl / padc não é necessário. A picture já coloca os espaços em branco.
Eu tb uso o ? e funciona normalmente.

Vc esta pondo 3 casas decimais (? "total: " + transform(vari, "@e 99,999.999").

Quais os valores que não estão saindo no lugar correto?
"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}
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

O padr / padl / padc não é necessário. A picture já coloca os espaços em branco.
Sim, não é necessário. Mas, conforme eu frisei, se houver alguma outra coisa que não números, será necessário usar a função PadL().
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
adilson
Usuário Nível 2
Usuário Nível 2
Mensagens: 93
Registrado em: 01 Fev 2008 07:02
Localização: americana - sao paulo

ou assim ....

Mensagem por adilson »

@linha,if(valor >100,colunax,colunay) say valor pict "@e 999,999.99"
Avatar do usuário
Netavin
Usuário Nível 3
Usuário Nível 3
Mensagens: 306
Registrado em: 28 Fev 2007 08:37
Localização: Cacoal-RO

Mensagem por Netavin »

olá gvc !!!
Antes de mais nada, quero dizer que estou falando do ponto decimal.
estou usando assim:

? alltrim(transform(variavel, "@e 999.999".

Os resultados estão se alinhando da seguinte forma:
4,645
14,810
102,764
se acontecer do total ter 3 casas antes do ponto decimal, fica como demonstado acima.

Grato!

Netavin
TK90 / TK95 / APPLE IIe / 286 / 386 / 486 / 586 / AMD Atlhon
" Sem saber que era impossível, foi lá e fez !! "
Adalberto
Usuário Nível 3
Usuário Nível 3
Mensagens: 343
Registrado em: 01 Set 2007 01:09
Localização: Santa Cruz de la Sierra - Bolivia

Transform

Mensagem por Adalberto »

Netavin,

A função ALLTRIM e a causa da falta de alinhamento.

Tire ela e tudo bom.

Da certo
Avatar do usuário
Netavin
Usuário Nível 3
Usuário Nível 3
Mensagens: 306
Registrado em: 28 Fev 2007 08:37
Localização: Cacoal-RO

Mensagem por Netavin »

ok Adalberto....
vou ver isso então! Retorno depois com o resultado.

Grato !

Obrigado a todos!

Netavin
TK90 / TK95 / APPLE IIe / 286 / 386 / 486 / 586 / AMD Atlhon
" Sem saber que era impossível, foi lá e fez !! "
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

Pode ter certeza. A função ALLTRIM() é a culpada pelo "corte" dos espaços, pois o resultado da função TRANSFORM() sempre tem a largura fixada pela máscara. Se a máscara é a mesma,...
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
gvc
Colaborador
Colaborador
Mensagens: 1270
Registrado em: 23 Ago 2005 10:57

Mensagem por gvc »

Achamos o culpado?

Então bate na cara dele e tira fora. Não espera nem ele pedir para sair.

A função alltrim() tira todos os espaços em branco do inicio e fim da sua string. Esse é o motivo de estar desalinhando seu relatório.
"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}
Avatar do usuário
Netavin
Usuário Nível 3
Usuário Nível 3
Mensagens: 306
Registrado em: 28 Fev 2007 08:37
Localização: Cacoal-RO

Mensagem por Netavin »

... Valeu "Superamigos" !!

Vou bater de frente !

[]´s

Netavin
TK90 / TK95 / APPLE IIe / 286 / 386 / 486 / 586 / AMD Atlhon
" Sem saber que era impossível, foi lá e fez !! "
Avatar do usuário
Clipper
Colaborador
Colaborador
Mensagens: 1334
Registrado em: 23 Ago 2004 00:04
Localização: Recife/PE

Mensagem por Clipper »

Veja o que eu tinha dito desde o inicio...
Clipper escreveu:Se você está usando da forma comum deveria sempre posicionar na mesma coluna.

@ 10,50 SAY TRANSFORM(VALTOT,"@E 999,999,999.99")

Como exatamente você está usando, tem algum TRIM, LTRIM ou outra função em uso conjunto ?
Até logo.

Marcelo
Programador que é programador, quando tá de folga vai inventar função nova, fazer testes, ou seja... se divertir
Cobra 210 - Drive de 8" 1.024 KB - 64 KB RAM - Impressora de Linha Cobra - Visicalc - Fortran - Dialog - Sistema Operacional SP/M (é sp/m mesmo - era o cp/m da cobra)
Responder