Clipper On Line • Ver Tópico - Converter carcteres maiusculos por minusculos

Converter carcteres maiusculos por minusculos

Discussão sobre a linguagem CA-Clipper.

Moderador: Moderadores

 

Converter carcteres maiusculos por minusculos

Mensagempor kristo » 05 Jun 2009 10:52

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
kristo
Usuário Nível 2

Usuário Nível 2
 
Mensagens: 54
Data de registro: 21 Set 2004 16:19
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Re: Converter carcteres maiusculos por minusculos

Mensagempor Toledo » 05 Jun 2009 12:37

Kristo, eu não testei, mas acho que vai dar certo... faz um teste ai!

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,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar de usuário

Toledo
Administrador

Administrador
 
Mensagens: 3038
Data de registro: 22 Jul 2003 18:39
Cidade/Estado: Araçatuba - SP
Curtiu: 263 vezes
Mens.Curtidas: 258 vezes

Re: Converter carcteres maiusculos por minusculos

Mensagempor alxsts » 05 Jun 2009 23:15

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:
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():
//---------------------------------------------------------------------------
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:

   USE CADASSO EXCLUSIVE NEW

   CADASSO->( DbGoTop(), ;
              DBEval( { || CADASSO->NOME     := InitCap( NOME), ;
                           CADASSO->ENDERECO := InitCap( ENDERECO ) ;
                      } ;
                    ),
              DBCloseArea() ;
            )
   __Quit()


Grandes []'s a todos
AlxSts
[]´s
Alexandre Santos (AlxSts)
alxsts
Colaborador

Colaborador
 
Mensagens: 2945
Data de registro: 12 Ago 2008 15:50
Cidade/Estado: São Paulo-SP-Brasil
Curtiu: 21 vezes
Mens.Curtidas: 248 vezes

Re: Converter carcteres maiusculos por minusculos

Mensagempor Toledo » 06 Jun 2009 08:27

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.

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,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar de usuário

Toledo
Administrador

Administrador
 
Mensagens: 3038
Data de registro: 22 Jul 2003 18:39
Cidade/Estado: Araçatuba - SP
Curtiu: 263 vezes
Mens.Curtidas: 258 vezes

Re: Converter carcteres maiusculos por minusculos

Mensagempor kristo » 26 Ago 2009 09:43

obrigado a todos, deu tudo certinho sim, muito grato a ajuda de vcs.
Que Deus abençõe a todos, paz
kristo
Usuário Nível 2

Usuário Nível 2
 
Mensagens: 54
Data de registro: 21 Set 2004 16:19
Curtiu: 0 vez
Mens.Curtidas: 0 vez




Retornar para CA-Clipper

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 5 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro