Página 1 de 1
Espaços em Branco.
Enviado: 15 Dez 2005 08:23
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.
Enviado: 15 Dez 2005 08:39
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.
Enviado: 15 Dez 2005 09:07
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

Enviado: 15 Dez 2005 12:20
por Marcos
Como usar a Função ALLTRIM() antes e depois?
Enviado: 15 Dez 2005 12:33
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
Enviado: 15 Dez 2005 12:44
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 :?)
Enviado: 15 Dez 2005 12:46
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 :?)
Enviado: 15 Dez 2005 12:47
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 :?)
Enviado: 16 Dez 2005 15:45
por Marcos
Obrigado a todos pela ajuda, adotei a o ALLTRIM() sugerido pelo Antonio e Ana, meus problemas acabaram!
Abraços,
Marcos.
Enviado: 16 Dez 2005 17:00
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.
Enviado: 16 Dez 2005 17:27
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.
Enviado: 16 Dez 2005 23:28
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 := " ‚¡¢£‡
Enviado: 17 Dez 2005 08:36
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!
Enviado: 18 Dez 2005 15:24
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...
Enviado: 18 Dez 2005 21:08
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