Clipper On Line • Ver Tópico - Primeira letra maiúscula/FOR EACH @

Primeira letra maiúscula/FOR EACH @

Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.

Moderador: Moderadores

 

Primeira letra maiúscula/FOR EACH @

Mensagempor JoséQuintas » 02 Abr 2020 15:13


REQUEST HB_CODEPAGE_PTISO

PROCEDURE MAIN

   LOCAL cText

   SET( _SET_CODEPAGE, "PTISO" )
   CLS
   cText := "ISTO É UMA BENÇÃO"
   @ 1, 0 SAY cText
   @ 2, 0 SAY CaseCapital( cText )
   Inkey(0)
   RETURN

FUNCTION CASECapital( cText )

   LOCAL lUpper := .T., cLetter

   cText := Lower( cText )
   FOR EACH cLetter IN @cText
      IF lUpper .AND. cLetter != Space(1)
         cLetter := Upper( cLetter )
         lUpper := .F.
      ENDIF
      IF cLetter == Space(1)
         lUpper := .T.
      ENDIF
   NEXT

   RETURN cText


upper.png
upper.png (7.94 KiB) Visualizado 4426 vezes
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Primeira letra maiúscula/FOR EACH @

Mensagempor alxsts » 02 Abr 2020 18:36

Olá!

Como o tempo passa!

Tópico de junho de 2009: Converter carcteres maiusculos por minusculos
[]´s
Alexandre Santos (AlxSts)
alxsts
Colaborador

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

Primeira letra maiúscula/FOR EACH @

Mensagempor bencz » 02 Abr 2020 20:32

José, boas noites!!

Bati o olho e ja vi um problema em seu código!
Veja a correção ( eu tirei os acentos e etc, pois meu "uindus" é em inglês, então, o console não mostra os acentos )
Troquei a variavel de entrada do for each, para não utilizar a referencia, pois tenho apenas o xHarbour em meu computador e o xHarbour não suporta variavel por referencia no foreach
Utilize a função "IsSpace" e não "space(1)", caso a string de entrada tenha tabs, por exemplo, a função IsSpace vai identificar isso

PROCEDURE MAIN

   LOCAL cText

   CLS
   cText := "ISTO   E   UMA   BENCAO"
   @ 1, 0 SAY cText
   @ 2, 0 SAY CaseCapital( cText )
   Inkey(0)
   RETURN

FUNCTION CASECapital( cText )

   LOCAL lUpper := .T., cLetter

   cText := Lower( cText )
   FOR EACH cLetter IN cText
      IF lUpper .AND. !IsSpace(cLetter)
         cText[HB_EnumIndex()] := Upper( cLetter )
         lUpper := .F.
      ENDIF
      IF IsSpace(cLetter)
         lUpper := .T.
      ENDIF
   NEXT

   RETURN cText
Imagem
Avatar de usuário

bencz
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 517
Data de registro: 28 Abr 2012 17:36
Curtiu: 6 vezes
Mens.Curtidas: 34 vezes

Primeira letra maiúscula/FOR EACH @

Mensagempor JoséQuintas » 02 Abr 2020 22:23

bencz escreveu:Veja a correção ( eu tirei os acentos e etc, pois meu "uindus" é em inglês, então, o console não mostra os acentos )


Não sei se funciona igual no Harbour, mas, XHarbour também tem GTWVG.

No Harbour é: hbmk2 projeto.hbp gtwvg.hbc
Sem alterar mais nada.

De console passa a ser uma janela do Windows, e aí fica liberada a codepage do Harbour.

Pensando bem, poderia ser o Empty() ao invés de comparar com espaço.
No aplicativo nem lembro se tenho isso, criei hoje pra um usuário de um fórum, minigui ou algo parecido.
E pra aproveitar e mostrar o uso da referência no for/each.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Primeira letra maiúscula/FOR EACH @

Mensagempor JoséQuintas » 02 Abr 2020 22:35

E não é que meu aplicativo tem.
Mas esta falha se tiver mais de um espaço em branco.

FUNCTION UpperLower( mTexto )

   LOCAL mTexto2 := "", mMaiuscula := .T., nCont, mLetra

   FOR nCont = 1 TO Len( mTexto )
      mLetra := Substr( mTexto, nCont, 1 )
      DO CASE
      CASE mLetra == " "
         mTexto2 += mLetra
         mMaiuscula  := .T.
      CASE mMaiuscula
         mTexto2 += Upper( mLetra )
         mMaiuscula  := .F.
      OTHERWISE
         mTexto2 += Lower( mLetra )
      ENDCASE
   NEXT

   RETURN mTexto2


Provavelmente dá pra fazer melhor com o hb_RegEx(), mas ainda não faço idéia como usar isso.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Primeira letra maiúscula/FOR EACH @

Mensagempor clodoaldomonteiro » 29 Jan 2022 17:12

Pra contribuir com o trabalho de vcs e aproveitando o que vcs colocaram aqui.
Vi a necessidade de deixar algumas palavras em minúsculo mesmo, como, "e, de, do, da".
Segua a função:
FUNCTION CaseCapital( cTexto )

   LOCAL x, mRetorno := '', aTexto, mExclusoes := "ao,e,de,do,da", mPalavra, mMask

   cTexto := Lower(cTexto)
   aTexto := HB_ATokens(cTexto, ' ')

   FOR x = 1 TO Len( aTexto )
      mPalavra := AllTrim(aTexto[x])
      If Len(mPalavra) > 0
         If mPalavra $ mExclusoes
            mRetorno += mPalavra + ' '
         Else
            mMask := '!' + Replicate('A', Len(mPalavra)-1)
            mRetorno += Transform( mPalavra, mMask) + ' '
         Endif
      Endif
   NEXT

   RETURN mRetorno
At. Clodoaldo Monteiro
Linguagens: Clipper / Harbour
Área de Atuação: Sistemas de gestão para Prefeituras Municipais
Fones: (86)3223-0653, 98859-0236
www.simplesinformatica.com.br
Avatar de usuário

clodoaldomonteiro
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 741
Data de registro: 30 Dez 2006 12:17
Cidade/Estado: Teresina-PI
Curtiu: 110 vezes
Mens.Curtidas: 31 vezes

Primeira letra maiúscula/FOR EACH @

Mensagempor alxsts » 29 Jan 2022 20:47

Olá!

Se você olhar a rotina que postei em 2009 (link acima), verá que este tratamento existe nela.
[]´s
Alexandre Santos (AlxSts)
alxsts
Colaborador

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




Retornar para Contribuições, Dicas e Tutoriais

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 21 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