Página 1 de 1
Converter carcteres maiusculos por minusculos
Enviado: 05 Jun 2009 10:52
por kristo
Bom dia a todos os amigos,
Preciso da ajuda de vcs, não sei programar em clipper, estou pegando o bond andando, tenho apenas uma leve noção.
Tenho um banco de dados que no campo "nome" e "endereço" os caracteres estão todos em maiúsculos, estou precisando colocar apenas as inicias em maiusculo EX. PAULO EDUARDO, preciso que fique Paulo Eduardo, e assim no campo endereço também.
Alguem poderia por gentileza montar uma PRG para eu executar aqui.
O nome da DBF é CADASSO, e tenho apenas 3 campos nele, NOME, ENDEREÇO, TELEFONE, preciso alterar somente o campo NOME e ENDEREÇO.
Fico no aguardo e desculpe o abuso em pedir para montar a PRG, pois não encontrei outra saída.
Grato Kristo
Re: Converter carcteres maiusculos por minusculos
Enviado: 05 Jun 2009 12:37
por Toledo
Kristo, eu não testei, mas acho que vai dar certo... faz um teste ai!
Código: Selecionar todos
use CADASSO New
GO TOP
DO WHILE !EOF()
vNome:=ConvMin(NOME)
vEndereco:=ConvMin(ENDERECO)
CADASSO->NOME:=vNome
CADASSO->ENDERECO:=vEndereco
SKIP
ENDDO
CLOSE ALL
RETU
FUNC ConvMin(vCmp)
LOCAL ret:=ALLTRIM(vCmp)
ret:=LEFT(ret,1)+LOWER(SUBS(ret,2))
FOR i=97 TO 122
ret:=STRTRAN(ret," "+CHR(i)," "+CHR(i-32))
NEXT
ret:=STRTRAN(ret," Da ", " da ")
ret:=STRTRAN(ret," Dos ", " dos ")
ret:=STRTRAN(ret," E ", " e ")
RETU (ret)
Atenção: por segurança, faça um teste com uma copia do arquivo CADASSO.DBF.
Abraços,
Re: Converter carcteres maiusculos por minusculos
Enviado: 05 Jun 2009 23:15
por alxsts
Olá amigos,
confesso que tambem não testei mas, olhando a rotina construida pelo Toledo, creio que vá gerar um run time error "Lock Required", pois o arquivo foi aberto sem se especificar o modo SHARED ou EXCLUSIVE (e não há nenhum SET EXCLUSIVE ON ativo) e não foi feito um RLock() antes de gravar cada registro. É melhor abrir o arquivo com EXCLUSIVE (USE CADASSO EXCLUSIVE NEW).
Creio tambem que os replaces poderiam ser feitos de forma direta:
Código: Selecionar todos
use CADASSO EXCLUSIVE New
GO TOP
DO WHILE !EOF()
// vNome:=ConvMin(NOME)
// vEndereco:=ConvMin(ENDERECO)
CADASSO->NOME:=ConvMin(NOME)
CADASSO->ENDERECO:=ConvMin(ENDERECO)
SKIP
ENDDO
CLOSE ALL
RETU
Ao longo dos meus quase 20 anos de Clipper, tambem precisei criar uma rotina para capitalizar frases, batizada de InitCap():
Código: Selecionar todos
//---------------------------------------------------------------------------
Function InitCap( cString )
Local cRet := "", nLen := Len( cString ), nAt, cVar
Local aExcept := { "da", "de", "do", "dos", "das", "a","e","o" }
If Valtype( cString ) == "C"
cString := Lower( AllTrim( cString ) )
While Len( cString ) > 0
If ( nAt := At( " ", cString ) ) > 0
cVar := Substr( cString, 1, nAt )
If ( Ascan( aExcept, Trim( cVar ) ) ) == 0
cRet += Upper( Left( cVar, 1 ) ) + Substr( cVar, 2 )
Else
cRet += cVar
Endif
Else
cRet += Upper( Left( cString, 1 ) ) + Substr( cString, 2 )
EXIT
Endif
cString := Substr( cString, ++nAt )
Enddo
Endif
Return cRet
//------------------------------------------------------------------------------
O Clipper é realmente uma linguagem fantástica! Vejam outra forma de se fazer a rotina acima. Usei InitCap() mas poderia ser a ConvMin() do Toledo:
Código: Selecionar todos
USE CADASSO EXCLUSIVE NEW
CADASSO->( DbGoTop(), ;
DBEval( { || CADASSO->NOME := InitCap( NOME), ;
CADASSO->ENDERECO := InitCap( ENDERECO ) ;
} ;
),
DBCloseArea() ;
)
__Quit()
Grandes []'s a todos
AlxSts
Re: Converter carcteres maiusculos por minusculos
Enviado: 06 Jun 2009 08:27
por Toledo
Amigos, se na abertura de um arquivo de dados não for especificado as cláusulas SHARED ou EXCLUSIVE, e nem utilizado o comando SET EXCLUSIVE, o arquivo sempre será aberto em modo EXCLUSIVE. Então provavelmente o exemplo que dei vai ser executado sem problema algum. Mas claro que é sempre bom se preocupar com a abertura e tratamento correto de um banco de dados.
Bom, eu ainda não tinha nada pronto, então montei a função na hora, apenas para dar ao nosso amigo Kristo um caminho a seguir.
Para completar minha função, não lembrei de verificar as palavras "de", "do" e "das", que pode ocorrer em Nome e Endereços.
Código: Selecionar todos
FUNC ConvMin(vCmp)
LOCAL ret:=ALLTRIM(vCmp)
ret:=LEFT(ret,1)+LOWER(SUBS(ret,2))
FOR i=97 TO 122
ret:=STRTRAN(ret," "+CHR(i)," "+CHR(i-32))
NEXT
ret:=STRTRAN(ret," Da ", " da ")
ret:=STRTRAN(ret," De ", " de ")
ret:=STRTRAN(ret," Do ", " do ")
ret:=STRTRAN(ret," Das ", " das ")
ret:=STRTRAN(ret," Dos ", " dos ")
ret:=STRTRAN(ret," E ", " e ")
RETU (ret)
Abraços,
Re: Converter carcteres maiusculos por minusculos
Enviado: 26 Ago 2009 09:43
por kristo
obrigado a todos, deu tudo certinho sim, muito grato a ajuda de vcs.
Que Deus abençõe a todos, paz