Espaços em Branco.

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Avatar do usuário
Marcos
Usuário Nível 3
Usuário Nível 3
Mensagens: 355
Registrado em: 20 Set 2003 09:16
Localização: Cáceres/Mato Grosso

Espaços em Branco.

Mensagem por Marcos »

Saudações,
Estou fazendo uma espécie de Declaração em meu sistema, assim, não sei como preencher os espaços em branco, tipo:

Eu, MARCOS ANTÔNIO DA SILVA, residente e domiciliado a rua DOS CISNES, 155 no bairro RESIDENCIAL ANA PAULA, ...

Nesta frase ficará com espaços em branco se o Nome, Rua e o Bairro forem menor que o informado, tipo:

Eu, MARCOS FILHO DA SILVA , residente e domiciliado a rua CINCO
, 155 no bairro JUNCO ,...

Não sei se foi claro, mas o problema é este, alguém poderia me ajudar?
Abraços,
Marcos.
Atenciosamente,
_____________________________
Marcos Antonio da Silva
marcosilva90@hotmail.com
MARCELOG
Usuário Nível 4
Usuário Nível 4
Mensagens: 546
Registrado em: 15 Mar 2005 16:54
Localização: Divinópolis/MG

Mensagem por MARCELOG »

Caro Marcos,
crie as variáveis com as informações (se elas não constarem do arquivo), e insira as mesmas no texto a ser impresso ou gravado em disco.

Exemplo rudimentar:

SET PRINTER TO cNomeArquivo

? "EU "+cNome+","+cEndereco...

SET PRINTER TO

Espero ter ajudado.

MGS

PS: veja a seção de downloads: cartas ou mala-direta, você vai encontrar exemplos completos.
anacatacombs
Membro Master
Membro Master
Mensagens: 472
Registrado em: 12 Jul 2005 16:53
Localização: Cianorte-Paraná
Contato:

Mensagem por anacatacombs »

A função ALLTRIM() retira os espaços em branco em volta da string.
Antes e depois.
acho que isso resolve seu problema.

[]'s
Ana :D
Avatar do usuário
Marcos
Usuário Nível 3
Usuário Nível 3
Mensagens: 355
Registrado em: 20 Set 2003 09:16
Localização: Cáceres/Mato Grosso

Mensagem por Marcos »

Como usar a Função ALLTRIM() antes e depois?
Atenciosamente,
_____________________________
Marcos Antonio da Silva
marcosilva90@hotmail.com
Avatar do usuário
Antonio
Usuário Nível 3
Usuário Nível 3
Mensagens: 347
Registrado em: 14 Ago 2003 17:33
Localização: Sao Paulo - SP
Contato:

Mensagem por Antonio »

Marcos escreveu:Como usar a Função ALLTRIM() antes e depois?

Código: Selecionar todos

SET PRINTER TO cNomeArquivo 

? "EU "+ALLTRIM(cNome)+", "+ALLTRIM(cEndereco) + "... "

SET PRINTER TO
 

Antonio Carlos
Harbour 3.2 (20180213)
Hwgui 2.20 3b | PostGresql 9.5 | ADO/ODBC
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Mensagem por rochinha »

Amiguinho

Veja este exemplo mais legal:

cFrase := "Eu, <NOME>, residente e domiciliado a rua <ENDERECO> no bairro <BAIRRO>, ... "

use CLIENTES
go top
do while .not. eof()
cNome := CLIENTES->nome
cEndereco := CLIENTES->endereco
cBairro := CLIENTES->bairro
cFrase := StrTran( cFrase, "<NOME>", cNome )
cFrase := StrTran( cFrase, "<ENDERECO>", cEndereco )
cFrase := StrTran( cFrase, "<BAIRRO>", cBairro )
set printer on
set device to printer
? cFrase
eject
set device to screen
set printer off
enddo
close data

Desta forma suas cartas serão impressas com mesmo conteudo para dados diferentes.

Isto é chamado de MailMerge.

@braços :?)
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Mensagem por rochinha »

Amiguinho

Veja este exemplo mais legal:

cFrase := "Eu, <NOME>, residente e domiciliado a rua <ENDERECO> no bairro <BAIRRO>, ... "

use CLIENTES
go top
do while .not. eof()
cNome := CLIENTES->nome
cEndereco := CLIENTES->endereco
cBairro := CLIENTES->bairro
cFrase := StrTran( cFrase, "<NOME>", cNome )
cFrase := StrTran( cFrase, "<ENDERECO>", cEndereco )
cFrase := StrTran( cFrase, "<BAIRRO>", cBairro )
set printer on
set device to printer
? cFrase
eject
set device to screen
set printer off
enddo
close data

Desta forma suas cartas serão impressas com mesmo conteudo para dados diferentes.

Isto é chamado de MailMerge.

@braços :?)
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Mensagem por rochinha »

Amiguinho

Veja este exemplo mais legal:

cFrase := "Eu, <NOME>, residente e domiciliado a rua <ENDERECO> no bairro <BAIRRO>, ... "

use CLIENTES
go top
do while .not. eof()
cNome := CLIENTES->nome
cEndereco := CLIENTES->endereco
cBairro := CLIENTES->bairro
cFrase := StrTran( cFrase, "<NOME>", cNome )
cFrase := StrTran( cFrase, "<ENDERECO>", cEndereco )
cFrase := StrTran( cFrase, "<BAIRRO>", cBairro )
set printer on
set device to printer
? cFrase
eject
set device to screen
set printer off
enddo
close data

Desta forma suas cartas serão impressas com mesmo conteudo para dados diferentes.

Isto é chamado de MailMerge.

@braços :?)
Avatar do usuário
Marcos
Usuário Nível 3
Usuário Nível 3
Mensagens: 355
Registrado em: 20 Set 2003 09:16
Localização: Cáceres/Mato Grosso

Mensagem por Marcos »

Obrigado a todos pela ajuda, adotei a o ALLTRIM() sugerido pelo Antonio e Ana, meus problemas acabaram!
Abraços,
Marcos.
Atenciosamente,
_____________________________
Marcos Antonio da Silva
marcosilva90@hotmail.com
Avatar do usuário
Marcos
Usuário Nível 3
Usuário Nível 3
Mensagens: 355
Registrado em: 20 Set 2003 09:16
Localização: Cáceres/Mato Grosso

Mensagem por Marcos »

Colegas, o problema do espaço em branco foi resolvido, o que eu gostaria de fazer é Justificar o texto escrito.
Alguém pode me ajudar?
Marcos.
Atenciosamente,
_____________________________
Marcos Antonio da Silva
marcosilva90@hotmail.com
Avatar do usuário
Marcos
Usuário Nível 3
Usuário Nível 3
Mensagens: 355
Registrado em: 20 Set 2003 09:16
Localização: Cáceres/Mato Grosso

Mensagem por Marcos »

Colegas, o problema do espaço em branco foi resolvido, o que eu gostaria de fazer é Justificar o texto escrito.
Alguém pode me ajudar?
Marcos.
Atenciosamente,
_____________________________
Marcos Antonio da Silva
marcosilva90@hotmail.com
Avatar do usuário
C Leonam
Usuário Nível 1
Usuário Nível 1
Mensagens: 32
Registrado em: 22 Nov 2005 17:40
Localização: Maceió

Mensagem por C Leonam »

Tente a função abaixo (foi descompilada de um antigo programa)

Código: Selecionar todos

*+²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²
*+
*+    Functions: Function IMPAC()
*+
*+    Reformatted by Click! 2.03 on Dec-16-2005 at 10:12 pm
*+
*+²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²

#include "common.ch"
#include "inkey.ch"

// *******************************

*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
*+
*+    Function IMPAC()
*+
*+   Arg1 = Texto a alinhar
*+   Arg2 = Linha (se for imprimir ou NIL para nao)
*+   Arg3 = Coluna (se for imprimir ou NIL para nao)
*+   Arg4 = Se passado .T. alinha o texto
*+
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
*+
FUNCTION IMPAC(Arg1,Arg2,Arg3,Arg4)

   LOCAL Local1 := "aeioucAEIOUC"
   LOCAL Local2 := " ‚¡¢£‡
Clp52e, Blinker 5.1
Avatar do usuário
Marcos
Usuário Nível 3
Usuário Nível 3
Mensagens: 355
Registrado em: 20 Set 2003 09:16
Localização: Cáceres/Mato Grosso

Mensagem por Marcos »

Obrigado C Leonam, mas a função não é a que precisava, pelo menos não consegui usa-la, ela não justifica o texto, aceito ajuda ainda!
Atenciosamente,
_____________________________
Marcos Antonio da Silva
marcosilva90@hotmail.com
Stanis Luksys
Colaborador
Colaborador
Mensagens: 1329
Registrado em: 18 Jun 2005 03:04
Localização: São Paulo
Contato:

Mensagem por Stanis Luksys »

Vamos lá,

Para justificar em impressão no modo DOS, não há outro jeito senão colocar espaços em brancos no meio das palavras e frases, por exemplo:

Digamos que vc tem 30 colunas para escrever STANIS LUKSYS (13 Col.), vc vai ter que improvisar algo do tipo:

S T A N I S L U K S Y S

A mesma coisa serve para o resto da linha... Apesar de parecer estranho é uma técnica comum e na impressão final não fica tão ruim...


Então aí vai de improviso:

Código: Selecionar todos

Function Justifica( cTexto, nTamanhoLinha  )

do while len(cTexto) < nTamanhoLinha

  cTexto := Stuff( cTexto,  rat( space(1), cTexto  ), 1,  space(2) ) 

enddo

return cTexto
Traduzindo: Pesquisa no texto a ocorrencia de space(1) e transforma em space(2) enquanto o tamanho do texto não atingir o numero máximo passado como paramentro...


Bem, não sei se funciona por que não testei... hehehe....

Um erro que pode vir a acontecer é que a função pegue onde ja tem "__" e coloque mais um ainda, pois ele ta procurando o espaço em branco, e dois espaçoes em branco obviamente possuem UM dentro...

Com um mínimo de esforço da pra corrigir isso aí, mas este exemp´lo foi só pra tomar como base... É por aí o caminho...
Stanis Luksys
sites.google.com/hblibs

Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
Avatar do usuário
Poka
Usuário Nível 4
Usuário Nível 4
Mensagens: 563
Registrado em: 25 Out 2004 21:26
Localização: Leme/SP

Mensagem por Poka »

Prezado colega

Compile esse exemplo e veja se resolve o seu caso.


set scor off
fl=chr(13)+chr(10) // fim de linha
arquivo:="cadTexto.dbf"
if .not. file(arquivo)
dbcreate ( "&arquivo" , { { "historico" , "m" ,10 ,0}})
endif
use cadtexto
if recco()=0
appe blank
endif
cls
@ maxrow(),00 say "Control + W grava e sai "
set cursor on
vhistorico:=historico
l1:=09;c1:=04;l2:=maxrow()-5;c2:=76
set color to w/r
@ l1,c1 to l2,c2
vhistorico:=memoedit(vhistorico,l1+1,c1+1,l2-1,c2-1)
//
ajustaHis(@vhistorico,70)
//
repla cadtexto->historico with vhistorico
close cadtexto
cls
retu nil
/////////////////
funct ajustaHis(xhistorico,xlargura)
local contlin,texto,falta:=0,vhistorico
// justifica a direita
// obs: se a linha terminar com ponto nao justifica
contlin=mlcount(xhistorico,xlargura)
if contlin=0
retu .t.
endif
vhistorico:=""
for a=1 to contlin
texto:=trim(memoline(xhistorico,xlargura,a))
IF .NOT. EMPTY(TEXTO)
margemE:=len(texto)-len(ltrim(texto))
falta:=xlargura-len(texto)
// verifica a quantidade de ocorrencias dessa linha
if right(texto,1)#"." .and. falta>0
texto:=strtran(alltrim(texto)," "," ","",falta)
CONTA:=0
do while margeME+len(texto)<xlargura .AND. CONTA<XLARGURA
texto:=strtran(alltrim(texto)," "," ",1,1)
CONTA++
enddo
vhistorico+=space(MargemE)+texto+fl
else
vhistorico+=texto+fl
endif
ELSE
vhistorico+=texto+fl
ENDIF
next
xhistorico:=vhistorico
retu .t.



Um abraço

Poka
Responder