VOCAL CON TILDE

HMG en Español

Moderator: Rathinagiri

User avatar
LOUIS
Posts: 210
Joined: Tue Dec 11, 2012 9:05 pm
DBs Used: DBF

VOCAL CON TILDE

Post by LOUIS »

Hola Amigos programadores

Por aquí con un problemilla que no sé cómo resolver :oops:

En el campo de una DBF tengo escrito palabras, de las cuales extraigo vocales y consonantes las veces que existan o se repitan
por ejemplo si tengo la frase UNA NOCHE CON BAILE y pulso para extraer la N ... tendría N N N (3 veces N)
y si pulso para extraer la O ... tendría O O (2 veces O)
y si pulso para extraer la A ... tendría A A (2 veces A)

El problema es cuando la vocal lleva tilde, como por ejemplo ESA MÁSCARA ES OK ... si pulso para extraer la letra A sólo me sale A A A (3 veces A)
es decir no me toma en cuenta la Á con tilde, ya que con esta deberían salir ---> A Á A A (4 veces A) que es lo correcto y que necesito.

Hay alguna forma de hacerlo ?
De antemano muchas gracias a quien responda.

Adjunto el código...

Code: Select all

#include "HMG.CH"

FUNCTION MAIN()
DEFINE WINDOW UNO AT 0,0 WIDTH 0 HEIGHT 0 BACKCOLOR {0,125,250} NOCAPTION MAIN
   FRASE='ESA MÁSCARA ES OK'
   LETRA='A'
   LARGO=LEN(FRASE)
   X=1
   Y=1
   DO WHILE LARGO>0
      PISO=SUBSTR(FRASE,X,1)		&& CADA LETRA
      POSI2='C'+ALLTRIM(STR(X))		&& LABEL
      IF PISO=LETRA
         IF X<25
            @ 86,X*50 LABEL &POSI2 VALUE PISO WIDTH 50 HEIGHT 70 FONT "TAHOMA" SIZE 48 BOLD
          ELSE
            IF X=25
               @ 186,50 LABEL &POSI2 VALUE PISO WIDTH 50 HEIGHT 70 FONT "TAHOMA" SIZE 48 BOLD
               Y=Y+1
             ELSE
               @ 186,Y*50 LABEL &POSI2 VALUE PISO WIDTH 50 HEIGHT 70 FONT "TAHOMA" SIZE 48 BOLD
               Y=Y+1
            ENDIF
         ENDIF
       ELSE
         IF X>=25
            Y=Y+1
         ENDIF
      ENDIF
      X=X+1
      LARGO=LARGO-1
   ENDDO   
   ON KEY ESCAPE ACTION UNO.RELEASE
END WINDOW
UNO.MAXIMIZE
UNO.ACTIVATE
RETURN
franco
Posts: 821
Joined: Sat Nov 02, 2013 5:42 am
DBs Used: DBF
Location: Canada

Re: VOCAL CON TILDE

Post by franco »

The two A`s are not the same.
You may have to set filter to A .or. Á. And the same for every other letter that has a tilde.
A = chr(65)
Á = chr165) I think.
You could try when needing all letter types set your filter to chr(65) .or. > chr(159) .and. < chr(170).
Check out character map in windows 10 or google character map.
All The Best,
Franco
Canada
User avatar
LOUIS
Posts: 210
Joined: Tue Dec 11, 2012 9:05 pm
DBs Used: DBF

Re: VOCAL CON TILDE

Post by LOUIS »

Hellow Mr. Franco

Thanks for your answer.

Sorry for my bad english :oops: ... Using chr(), i see what number 195 is same for 5 vocals con tilde :shock:

Attach new code for this case and one picture, where i see what vowels with accents look ugly in screen :!:

Code: Select all

#include "HMG.CH"

FUNCTION MAIN()
DEFINE WINDOW UNO AT 0,0 WIDTH 0 HEIGHT 0 BACKCOLOR {0,125,250} NOCAPTION MAIN

//1
   LETRA='Á'
   IF LETRA=CHR(195)		// NUMBER IS SAME, WHY ?
      @ 80*1,250 LABEL A VALUE 'ESTO ES LETRA -A- CON TILDE ---> '+LETRA WIDTH 999 HEIGHT 50 FONT "TAHOMA" SIZE 24 BOLD FONTCOLOR WHITE BACKCOLOR {0,125,250}
   ENDIF

//2
   LETRA='É'
   IF LETRA=CHR(195)		// NUMBER IS SAME, WHY ?
      @ 80*2,250 LABEL E VALUE 'ESTO ES LETRA -E- CON TILDE ---> '+LETRA WIDTH 999 HEIGHT 50 FONT "TAHOMA" SIZE 24 BOLD FONTCOLOR WHITE BACKCOLOR {0,125,250}
   ENDIF

//3
   LETRA='Í'
   IF LETRA=CHR(195)		// NUMBER IS SAME, WHY ?
      @ 80*3,250 LABEL I VALUE 'ESTO ES LETRA -I- CON TILDE ---> '+LETRA WIDTH 999 HEIGHT 50 FONT "TAHOMA" SIZE 24 BOLD FONTCOLOR WHITE BACKCOLOR {0,125,250}
   ENDIF

//4
   LETRA='Ó'
   IF LETRA=CHR(195)		// NUMBER IS SAME, WHY ?
      @ 80*4,250 LABEL O VALUE 'ESTO ES LETRA -O- CON TILDE ---> '+LETRA WIDTH 999 HEIGHT 50 FONT "TAHOMA" SIZE 24 BOLD FONTCOLOR WHITE BACKCOLOR {0,125,250}
   ENDIF

//5
   LETRA='Ú'
   IF LETRA=CHR(195)		// NUMBER IS SAME, WHY ?
      @ 80*5,250 LABEL U VALUE 'ESTO ES LETRA -U- CON TILDE ---> '+LETRA WIDTH 999 HEIGHT 50 FONT "TAHOMA" SIZE 24 BOLD FONTCOLOR WHITE BACKCOLOR {0,125,250}
   ENDIF

   ON KEY ESCAPE ACTION UNO.RELEASE
END WINDOW

UNO.MAXIMIZE
UNO.ACTIVATE
RETURN
Attachments
VOCALES CON TILDE.jpg
VOCALES CON TILDE.jpg (74.55 KiB) Viewed 294 times
User avatar
mustafa
Posts: 1160
Joined: Fri Mar 20, 2009 11:38 am
DBs Used: DBF
Location: Alicante - Spain
Contact:

Re: VOCAL CON TILDE

Post by mustafa »

Hola Louis
El fichero.prg tienes que salvarlo en UTF-8 no en ANSI
y coloca esto:

Code: Select all


#include "HMG.CH"
FUNCTION MAIN()
SET CODEPAGE TO UNICODE   //<----
SET LANGUAGE TO SPANISH   //<---

DEFINE WINDOW UNO AT 0,0 WIDTH 0 HEIGHT 0 BACKCOLOR {0,125,250} NOCAPTION MAIN

Saludos
Mustafa :D
Attachments
Imagen2.jpg
Imagen2.jpg (54.87 KiB) Viewed 283 times
franco
Posts: 821
Joined: Sat Nov 02, 2013 5:42 am
DBs Used: DBF
Location: Canada

Re: VOCAL CON TILDE

Post by franco »

Hi Louis, Thank you Mustafa. This looks to be the correct way to solve problem.
In English we do not use Á as a letter.
My way you are looking for all the A`s in ascii system. chr(65), chr(160), chr(161, 162, 163, 164, 165, 166, 167, 168, 169.
To confusing, Not just tilde.
All The Best,
Franco
Canada
User avatar
LOUIS
Posts: 210
Joined: Tue Dec 11, 2012 9:05 pm
DBs Used: DBF

Re: VOCAL CON TILDE

Post by LOUIS »

Hola Amigo Mustafa

Gracias por responder ...
Efectivamente sí me salió idéntico a su corrección, las 5 vocales tildadas !

Ahora pude mostrar la vocal A con o sin tilde, todas a la vez ...
Veré como lo adapto al programa principal y si no me da problema lo volveré a subir modificado.

Gracias nuevamente Sr. Mustafa

Saludos
Louis.

Code: Select all

#include "HMG.CH"

FUNCTION MAIN()
SET CODEPAGE TO UNICODE
SET LANGUAGE TO SPANISH

DEFINE WINDOW UNO AT 0,0 WIDTH 0 HEIGHT 0 BACKCOLOR {0,125,250} NOCAPTION MAIN

   FRASE='ESA MÁSCARA ES OK'
   LETRA='A'			// VOCAL SIN TILDE A BUSCAR EN LA FRASE Y MOSTRARLA

LETRA2='Ñ'		// comodín

   LARGO=LEN(FRASE)
   X=1
   Y=1
   DO WHILE LARGO>0
      LETT=SUBSTR(FRASE,X,1)		// CADA LETRA
      LABE='L'+ALLTRIM(STR(X))		// LABEL

      IF LETT=LETRA
         @ 99,X*50 LABEL &LABE VALUE LETT WIDTH 99 HEIGHT 70 FONT "TAHOMA" SIZE 48 BOLD FONTCOLOR WHITE BACKCOLOR {0,125,250}
      ENDIF

      IF LETT=CHR(65)		// vocal sin tilde
         LETRA2='Á'		// forsa a buscar con tilde también
      ENDIF
      IF LETT=CHR(195) .AND. LETRA='A'
         @ 99,X*50 LABEL &LABE VALUE LETRA2 WIDTH 99 HEIGHT 70 FONT "TAHOMA" SIZE 48 BOLD FONTCOLOR WHITE BACKCOLOR {0,125,250}
      ENDIF

      X=X+1
      LARGO=LARGO-1
   ENDDO   
   ON KEY ESCAPE ACTION UNO.RELEASE
END WINDOW
UNO.MAXIMIZE
UNO.ACTIVATE
RETURN
Attachments
VOCAL CON Y SIN TILDE.jpg
VOCAL CON Y SIN TILDE.jpg (9.32 KiB) Viewed 236 times
User avatar
LOUIS
Posts: 210
Joined: Tue Dec 11, 2012 9:05 pm
DBs Used: DBF

Re: VOCAL CON TILDE

Post by LOUIS »

Hola Amigos

Saben, parece que hay un error en el código, ya que ahora sí sale la vocal A con y sin tilde, pero la ubicación en la frase, al mostrar en pantalla, noto que después de la Á se crea un espacio de más ...créanme que le he dado vuelta y vuelta al código y no logro encontrar el error :oops:

Por eso recurro una vez más a uds, si alguien quisiera ayudarme, muchas gracias.

Louis

Code: Select all

#include "HMG.CH"

FUNCTION MAIN()
SET CODEPAGE TO UNICODE
SET LANGUAGE TO SPANISH

DEFINE WINDOW UNO AT 0,0 WIDTH 0 HEIGHT 0 BACKCOLOR {0,125,250} NOCAPTION MAIN
   FRASE='ESA MÁSCARA CAUSA CÁNCER'
   LETRA='A'			// LETRA A BUSCAR EN LA FRASE Y MOSTRARLA

   LARGO=LEN(FRASE)
   X=1
   Y=1
   P=0
DO WHILE LARGO>0
   LETT=SUBSTR(FRASE,X,1)		// CADA LETRA
   LABE1='L'+ALLTRIM(STR(X))		// LABEL1
   LABE2='M'+ALLTRIM(STR(X))		// LABEL2
   IF P=0
      IF LETT=LETRA
         @ 99,X*50 LABEL &LABE1 VALUE LETT WIDTH 99 HEIGHT 70 FONT "TAHOMA" SIZE 48 BOLD FONTCOLOR WHITE BACKCOLOR {0,125,250}
       ELSE				// PINTA LAS DEMÁS LETRAS
         @ 99,X*50 LABEL &LABE1 VALUE LETT WIDTH 99 HEIGHT 70 FONT "TAHOMA" SIZE 48 BOLD FONTCOLOR WHITE BACKCOLOR {0,125,250}
      ENDIF
    ELSE				// POSICIÓN DESPUÉS DE LA LETRA CON TILDE
      IF LETT=LETRA
         @ 99,X*50 LABEL &LABE1 VALUE LETT WIDTH 99 HEIGHT 70 FONT "TAHOMA" SIZE 48 BOLD FONTCOLOR WHITE BACKCOLOR {0,125,250}
       ELSE
         @ 99,X*50 LABEL &LABE1 VALUE LETT WIDTH 99 HEIGHT 70 FONT "TAHOMA" SIZE 48 BOLD FONTCOLOR WHITE BACKCOLOR {0,125,250}
      ENDIF
      P=0
   ENDIF

   IF LETT=CHR(195) .AND. LETRA='A'
      P=1
      LETRA2='Á'
      @ 99,X*50 LABEL &LABE2 VALUE LETRA2 WIDTH 99 HEIGHT 70 FONT "TAHOMA" SIZE 48 BOLD FONTCOLOR WHITE BACKCOLOR {0,125,250}
   ENDIF
   X=X+1
   LARGO=LARGO-1
ENDDO   
ON KEY ESCAPE ACTION UNO.RELEASE

END WINDOW
UNO.MAXIMIZE
UNO.ACTIVATE
RETURN
Attachments
VOCAL CON Y SIN TILDE.jpg
VOCAL CON Y SIN TILDE.jpg (36.99 KiB) Viewed 200 times
User avatar
jorge_riv
Posts: 65
Joined: Thu Nov 22, 2018 2:20 pm
DBs Used: DBF, MySQL,SQL SERVER, Oracle.

Re: VOCAL CON TILDE

Post by jorge_riv »

Por defecto, HMG funciona en Unicode, para esto debe usar:
---------------------------------
REQUEST HB_LANG_ES
HB_LANGSELECT("ES")

SET LANGUAGE TO SPANISH
SET CODEPAGE TO UNICODE

REQUEST HB_CODEPAGE_ESWIN // <=== Muy importante
HB_SETCODEPAGE("ESWIN") // <=== Muy importante
------------------------
Tambien usar hb_ucode()
*-------------------------
* HB_UCHAR(225) <= á
* HB_UCHAR(233) <= é
* HB_UCHAR(237) <= í
* HB_UCHAR(243) <= ó
* HB_UCHAR(250) <= ú
* HB_UCHAR(209) <= Ñ
* HB_UCHAR(241) <= ñ
* HB_UCHAR(193) <= é
* HB_UCHAR(201) <= É
* HB_UCHAR(204) <= Í
* HB_UCHAR(211) <= Ó
* HB_UCHAR(08364) <= €

Tomo el valor Unicode de: https://unicode-table.com/es/
Esto podría ser util? http://www.ssec.wisc.edu/~tomw/java/unicode.html#x2500

Y aquí varias tablas Unicodes:
http://www.ssec.wisc.edu/~tomw/java/unicode.html

Espero te sirva.
User avatar
LOUIS
Posts: 210
Joined: Tue Dec 11, 2012 9:05 pm
DBs Used: DBF

Re: VOCAL CON TILDE

Post by LOUIS »

Hola Amigos

Gracias Jorge_Riv por contestar, pero creo que ya estàn esos pasos, porque ya aparece en screen las letras con tilde.

Les ruego me disculpen, pero no puedo encontrar el error en el código :oops:
Hice los pasos que me recomendó el Sr Mustafa para que muestre las letras con tilde y compilé con IDE no Ansi y todo OK, el problema es un espacio que se crea y no sé de dónde, después de mostrar precisamente la vocal con tilde.

Así está el último código:

Code: Select all

#include "HMG.CH"

FUNCTION MAIN()
SET CODEPAGE TO UNICODE
SET LANGUAGE TO SPANISH

DEFINE WINDOW UNO AT 0,0 WIDTH 0 HEIGHT 0 BACKCOLOR {0,125,250} NOCAPTION MAIN
   FRASE="ESA MÁSCARA CAUSA CÁNCER"
   LETRA='A'			// LETRA A BUSCAR EN LA FRASE Y MOSTRARLA

   LARGO=LEN(ALLTRIM(FRASE))
   X=1
   Y=1
DO WHILE LARGO>0
   LETT=SUBSTR(FRASE,X,1)		// CADA LETRA
   L1='L'+ALLTRIM(STR(X))		// LABEL PARA MOSTRAR TODAS LAS LETRAS MENOS LA Á (INCLUYE ESPACIOS)
   L2='M'+ALLTRIM(STR(X))		// LABEL PARA LLEVAR NUMERACIÓN DE X
 
   L3='N'+ALLTRIM(STR(Y))		// LABEL PARA A CON TILDE
   L4='O'+ALLTRIM(STR(Y))		// LABEL PARA LLEVAR NUMERACIÓN A LA PAR CON X

   NUMERO = ASC(LETT)			// PARA SABER EL # CHR

   IF LETT=CHR(195) .AND. LETRA='A'		// PINTA LAS Á
      LETRA2='Á'
      @ 099,Y*50 LABEL &L3 VALUE ALLTRIM(LETRA2) WIDTH 99 HEIGHT 70 FONT "TAHOMA" SIZE 48 BOLD FONTCOLOR GREEN BACKCOLOR {0,125,250}
      @ 200,Y*50 LABEL &L4 VALUE STR(X,2,0) WIDTH 99 HEIGHT 70 FONT "TAHOMA" SIZE 20 BOLD FONTCOLOR GREEN BACKCOLOR {0,125,250}
    ELSE
      IF LETT='A' .AND. NUMERO<>195		// PINTA LAS A
         @ 099,X*50 LABEL &L1 VALUE LETT WIDTH 99 HEIGHT 70 FONT "TAHOMA" SIZE 48 BOLD FONTCOLOR YELLOW BACKCOLOR {0,125,250}
         @ 200,X*50 LABEL &L2 VALUE STR(X,2,0) WIDTH 99 HEIGHT 70 FONT "TAHOMA" SIZE 20 BOLD FONTCOLOR YELLOW BACKCOLOR {0,125,250}
       ELSE
         IF NUMERO=32		// ESPACIO EN BLANCO
            @ 099,X*50 LABEL &L1 VALUE '_' WIDTH 99 HEIGHT 70 FONT "TAHOMA" SIZE 48 BOLD FONTCOLOR BROWN BACKCOLOR {0,125,250}
            @ 200,X*50 LABEL &L2 VALUE STR(X,2,0) WIDTH 99 HEIGHT 70 FONT "TAHOMA" SIZE 20 BOLD FONTCOLOR BROWN BACKCOLOR {0,125,250}
          ELSE			// LAS DEMÁS LETRAS
            @ 099,X*50 LABEL &L1 VALUE LETT WIDTH 99 HEIGHT 70 FONT "TAHOMA" SIZE 48 BOLD FONTCOLOR WHITE BACKCOLOR {0,125,250}
            @ 200,X*50 LABEL &L2 VALUE STR(X,2,0) WIDTH 99 HEIGHT 70 FONT "TAHOMA" SIZE 20 BOLD FONTCOLOR WHITE BACKCOLOR {0,125,250}
         ENDIF
      ENDIF
   ENDIF
   X=X+1
   Y=Y+1
   LARGO=LARGO-1
ENDDO   
ON KEY ESCAPE ACTION UNO.RELEASE
END WINDOW
UNO.MAXIMIZE
UNO.ACTIVATE
RETURN
Saludos
Louis

P.D.- Adjunto imagen donde se muestra toda la frase y con su número de ubicación.
Attachments
VOCAL CON Y SIN TILDE.jpg
VOCAL CON Y SIN TILDE.jpg (145.36 KiB) Viewed 119 times
franco
Posts: 821
Joined: Sat Nov 02, 2013 5:42 am
DBs Used: DBF
Location: Canada

Re: VOCAL CON TILDE

Post by franco »

You may want to try Alltrim() or Rtrim() when not chr(32).
All The Best,
Franco
Canada
Post Reply