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 3660 vezes
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 14319
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 13 vezes
Mens.Curtidas: 859 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: 2298
Data de registro: 12 Ago 2008 15:50
Cidade/Estado: São Paulo-SP-Brasil
Curtiu: 14 vezes
Mens.Curtidas: 159 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: 513
Data de registro: 28 Abr 2012 17:36
Curtiu: 6 vezes
Mens.Curtidas: 33 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.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 14319
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 13 vezes
Mens.Curtidas: 859 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.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 14319
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 13 vezes
Mens.Curtidas: 859 vezes




Retornar para Contribuições, Dicas e Tutoriais

Quem está online

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