Page 1 of 2
VOCAL CON TILDE
Posted: Tue Apr 16, 2024 4:41 pm
by LOUIS
Hola Amigos programadores
Por aquí con un problemilla que no sé cómo resolver
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
Re: VOCAL CON TILDE
Posted: Sun Apr 21, 2024 4:07 pm
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.
Re: VOCAL CON TILDE
Posted: Mon Apr 22, 2024 12:11 pm
by LOUIS
Hellow Mr. Franco
Thanks for your answer.
Sorry for my bad english
... Using chr(), i see what number 195 is same for 5 vocals con tilde
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
Re: VOCAL CON TILDE
Posted: Mon Apr 22, 2024 1:52 pm
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
Re: VOCAL CON TILDE
Posted: Mon Apr 22, 2024 3:50 pm
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.
Re: VOCAL CON TILDE
Posted: Mon Apr 22, 2024 6:25 pm
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
Re: VOCAL CON TILDE
Posted: Tue Apr 23, 2024 3:36 pm
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
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
Re: VOCAL CON TILDE
Posted: Tue Apr 23, 2024 6:34 pm
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.
Re: VOCAL CON TILDE
Posted: Wed Apr 24, 2024 3:43 pm
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
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.
Re: VOCAL CON TILDE
Posted: Wed Apr 24, 2024 5:25 pm
by franco
You may want to try Alltrim() or Rtrim() when not chr(32).