Espaços em Branco.
Moderador: Moderadores
- Marcos
- Usuário Nível 3

- Mensagens: 355
- Registrado em: 20 Set 2003 09:16
- Localização: Cáceres/Mato Grosso
Espaços em Branco.
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.
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.
-
MARCELOG
- Usuário Nível 4

- Mensagens: 546
- Registrado em: 15 Mar 2005 16:54
- Localização: Divinópolis/MG
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.
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

- Mensagens: 472
- Registrado em: 12 Jul 2005 16:53
- Localização: Cianorte-Paraná
- Contato:
- Antonio
- Usuário Nível 3

- Mensagens: 347
- Registrado em: 14 Ago 2003 17:33
- Localização: Sao Paulo - SP
- Contato:
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
Harbour 3.2 (20180213)
Hwgui 2.20 3b | PostGresql 9.5 | ADO/ODBC
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
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 :?)
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 :?)
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
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 :?)
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 :?)
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
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 :?)
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 :?)
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
-
Stanis Luksys
- Colaborador

- Mensagens: 1329
- Registrado em: 18 Jun 2005 03:04
- Localização: São Paulo
- Contato:
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:
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...
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
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.
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.
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
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
