Length con acentos

Para cualquier tema relacionado con la asignatura de Programación en cualquier titulación.

Length con acentos

Notapor Uxio » Sab, 13 Dic 2008 23:04

Estoy teniendo un problema con la práctica final y la longitud de las palabras.

El Pascal con la función length cuenta las letras acentuadas como dos letras. Comprobé que por ejemplo 'é' no se puede asignar a un char. Pero por ejemplo,

Código: Seleccionar todo
var hola:string(20);
begin
 hola:='é';
 write(hola[1]);
end.


Y devuelve 'é'. No se suponía que no es un char????

A ver si alguien me puede ayudar.

Saludos y gracias por adelantado.
Matrix está programado en Pascal...
Avatar de Usuario
Uxio
Cuervo Frío
 
Mensajes: 127
Registrado: Lun, 29 Sep 2008 15:43

Re: Length con acentos

Notapor Fer » Sab, 13 Dic 2008 23:18

¿Hay algún tipo de función llamada StrLen o algo parecido? De todas maneras, hazte un módulo con esa función, si quieres, hecha por ti, y que si ve que es con acentos, sume uno, y en otro caso, use la función length normal.
Campaña de donación de apuntes:

¡Súbelos a la sección de apuntes o deja los tuyos en el local de alumnos!
Avatar de Usuario
Fer
QG Admin
Corresponsal de guerra
 
Mensajes: 26112
Registrado: Vie, 22 Sep 2006 14:18
Ubicación: A Coruña

Re: Length con acentos

Notapor Uxio » Dom, 14 Dic 2008 0:21

FeR escribió:¿Hay algún tipo de función llamada StrLen o algo parecido?


Ok, miraré a ver, pero a saber, el pascal este no tiene nada, casi todo a mano xD...


De todas maneras, hazte un módulo con esa función, si quieres, hecha por ti, y que si ve que es con acentos, sume uno, y en otro caso, use la función length normal.


Es lo que estuve intentando hacer, pero pascal dice que '´' (la tilde) no es un char, las palabras acentuadas tampoco son chars, ¿entonces cómo busco palabras acentuadas?

Muchas gracias por la ayuda Fer
Matrix está programado en Pascal...
Avatar de Usuario
Uxio
Cuervo Frío
 
Mensajes: 127
Registrado: Lun, 29 Sep 2008 15:43

Re: Length con acentos

Notapor Fer » Dom, 14 Dic 2008 0:35

Por ejemplo: cadena[i] es un char, siendo cadena un String. Puedes hacer un bucle for desde 0 hasta cadena.length -1, pero claro, estamos metiéndonos en bucles infinitos absurdos, porque si para calcular length que lo hace mal (me sigue extrañando) usas la función length, mal vamos. :lol:
Campaña de donación de apuntes:

¡Súbelos a la sección de apuntes o deja los tuyos en el local de alumnos!
Avatar de Usuario
Fer
QG Admin
Corresponsal de guerra
 
Mensajes: 26112
Registrado: Vie, 22 Sep 2006 14:18
Ubicación: A Coruña

Re: Length con acentos

Notapor Chila » Dom, 14 Dic 2008 17:07

Eso nos pasaba a nosotros el año pasado, si guardas los archivos en formato iso occidental en vez de en el que lo hace por defecto te reconoce la ampliacion de los ascii (donde estan los acentuados). Al ejecutar el programa tienes tambien que poner el terminal en modo iso occidental.

Espero que esto te sirva de ayuda, si no lo entiendes a la noche lo miro exactamente y lo pongo detallado.
Vete al instituto.
Avatar de Usuario
Chila
Infectador de Almas
 
Mensajes: 535
Registrado: Sab, 20 Oct 2007 21:01

Re: Length con acentos

Notapor Uxio » Dom, 14 Dic 2008 20:18

Muchas gracias a Fer y a Chila, probaré lo del ISO OCCIDENTAL...

Un saludo
Matrix está programado en Pascal...
Avatar de Usuario
Uxio
Cuervo Frío
 
Mensajes: 127
Registrado: Lun, 29 Sep 2008 15:43

Re: Length con acentos

Notapor erKURITA » Lun, 15 Dic 2008 15:40

Acabo de experimentar con esto, y me ha dado resultados interesantes:

Usando codificacion UTF-8:

  • length(cadena), habiendo recibido por pantalla una 'é', devuelve 2 (THANKS CAPT. OBVIOUS).
  • cadena[1] contiene 195 en Decimales, cadena[2] contiene 169 en decimales.
  • writeln(cadena[1],cadena[2]) escribe 'é'.
  • Sumarle 1 al ordinal de cadena[1] aumenta en 64 el ordinal del caracter escrito por writeln(cadena[1],cadena[2])
  • Sumarle 1 al ordinal de cadena[2] aumenta en 1 el ordinal del caracter escrito por writeln(cadena[1],cadena[2])

Aun sigo sin ver la relacion entre cadena[1], cadena[2] y la "suma" entre estos.
Avatar de Usuario
erKURITA
Colenzo el Aniquilador
erKARAJO
 
Mensajes: 2446
Registrado: Sab, 13 Sep 2008 10:43

Re: Length con acentos

Notapor Santa » Lun, 15 Dic 2008 16:10

Es que un carácter utf8 es de longitud variable. un carácter puede ocupar un byte o más. Un año más, la misma mierda. Mi consejo, como siempre, es que presionéis a los profesores para que os dejen no considerar las tildes y las eñes en vuestros programas, cosa que os deberían dejar hacer si fuesen sensatos, porque que os pongáis a estas alturas con codificaciones de caracteres, no os aporta nada. Si no cuela, utilizad la codificación iso8859-15 (es el "iso occidental" que dicen por ahí) en la que un carácter ocupa un byte y así es más fácil escribir los programas.

Por cierto, tenéis más información en man iso-8859-15 y en man utf-8. También tenéis el comando "iconv" por si os interesa.
Avatar de Usuario
Santa
Colenzo el Aniquilador
Lord Sith
 
Mensajes: 2283
Registrado: Mié, 25 Oct 2006 22:01

Re: Length con acentos

Notapor erKURITA » Lun, 15 Dic 2008 16:53

Santa escribió:Es que un carácter utf8 es de longitud variable. un carácter puede ocupar un byte o más. Un año más, la misma mierda. Mi consejo, como siempre, es que presionéis a los profesores para que os dejen no considerar las tildes y las eñes en vuestros programas, cosa que os deberían dejar hacer si fuesen sensatos, porque que os pongáis a estas alturas con codificaciones de caracteres, no os aporta nada. Si no cuela, utilizad la codificación iso8859-15 (es el "iso occidental" que dicen por ahí) en la que un carácter ocupa un byte y así es más fácil escribir los programas.

Por cierto, tenéis más información en man iso-8859-15 y en man utf-8. También tenéis el comando "iconv" por si os interesa.


Entonces dudo que cuele el que:

conversa escribió:
  • P: A ver, corre el programa
  • A: Un segundo, tengo que cambiar la codificacion del terminal...
  • P: Por que?
  • A: Porque si no no me lee bien las vocales acentuadas ni las ñ *:(*
  • P: O sea, que tal como esta, no funcionaria bien?
  • A: Lo dudo *:X*
  • P: Ah si? Suspenso pues *>:3*


:(
Avatar de Usuario
erKURITA
Colenzo el Aniquilador
erKARAJO
 
Mensajes: 2446
Registrado: Sab, 13 Sep 2008 10:43

Re: Length con acentos

Notapor ArTo » Lun, 15 Dic 2008 17:11

Nunca vi a ningún profesor tan cabrón así que no os preocupéis por eso ;)
Imagen
Te diré la verdad: tú no sabes afrontar la verdad. Cuando alargues la mano y te la encuentres toda manchada de mocos que antes eran la cara de tu amigo sabrás lo que tienes que hacer. Olvídalo Marge, ¡¡ES CHINATOWN!!
Avatar de Usuario
ArTo
Heladostein
Fanshawe
 
Mensajes: 1106
Registrado: Mar, 19 Feb 2008 21:24
Ubicación: Arteixo

Re: Length con acentos

Notapor Santa » Lun, 15 Dic 2008 17:17

erKURITA escribió:
Santa escribió:Es que un carácter utf8 es de longitud variable. un carácter puede ocupar un byte o más. Un año más, la misma mierda. Mi consejo, como siempre, es que presionéis a los profesores para que os dejen no considerar las tildes y las eñes en vuestros programas, cosa que os deberían dejar hacer si fuesen sensatos, porque que os pongáis a estas alturas con codificaciones de caracteres, no os aporta nada. Si no cuela, utilizad la codificación iso8859-15 (es el "iso occidental" que dicen por ahí) en la que un carácter ocupa un byte y así es más fácil escribir los programas.

Por cierto, tenéis más información en man iso-8859-15 y en man utf-8. También tenéis el comando "iconv" por si os interesa.


Entonces dudo que cuele el que:

conversa escribió:
  • P: A ver, corre el programa
  • A: Un segundo, tengo que cambiar la codificacion del terminal...
  • P: Por que?
  • A: Porque si no no me lee bien las vocales acentuadas ni las ñ *:(*
  • P: O sea, que tal como esta, no funcionaria bien?
  • A: Lo dudo *:X*
  • P: Ah si? Suspenso pues *>:3*


:(


Podía ser un problema, pero es lo segundo mejor que podéis hacer: que funcione exactamente con una codificación. Porque autodetectarla iba a ser tela fina.
Avatar de Usuario
Santa
Colenzo el Aniquilador
Lord Sith
 
Mensajes: 2283
Registrado: Mié, 25 Oct 2006 22:01

Re: Length con acentos

Notapor perico2 » Mié, 07 Ene 2009 17:38

En clase el profesor nos dijo que guardaramos el .pas con la codificación en Cyrilic iso8859-5 y lo mismo el terminal.

Pero supongo que vale con western iso8859-15, ya viene para escogerlo al guardar y pilla perfectamente como un caracter las tildes y ñ. Os paso los valores:

Código: Seleccionar todo
á: 225
é: 233
í: 237
ó: 243
ú: 250

Á: 193
É: 201
Í: 205
Ó: 211
Ú: 218

ñ: 241
Ñ: 209
perico2
Bishibosh
 
Mensajes: 27
Registrado: Dom, 05 Oct 2008 13:47

Re: Length con acentos

Notapor erKURITA » Vie, 09 Ene 2009 21:06

perico2 escribió:En clase el profesor nos dijo que guardaramos el .pas con la codificación en Cyrilic iso8859-5 y lo mismo el terminal.

Pero supongo que vale con western iso8859-15, ya viene para escogerlo al guardar y pilla perfectamente como un caracter las tildes y ñ. Os paso los valores:

Código: Seleccionar todo
á: 225
é: 233
í: 237
ó: 243
ú: 250

Á: 193
É: 201
Í: 205
Ó: 211
Ú: 218

ñ: 241
Ñ: 209


Me interesan :3~~ Ya va siendo hora de que agregue soporte para los acentos y la Ñ...
Avatar de Usuario
erKURITA
Colenzo el Aniquilador
erKARAJO
 
Mensajes: 2446
Registrado: Sab, 13 Sep 2008 10:43

Re: Length con acentos

Notapor Uxio » Sab, 10 Ene 2009 23:42

La bióloga nos mandó poner todo iso8859-15-western, y ahora va perfecto

Saludos y gracias a todos
Matrix está programado en Pascal...
Avatar de Usuario
Uxio
Cuervo Frío
 
Mensajes: 127
Registrado: Lun, 29 Sep 2008 15:43

Re: Length con acentos

Notapor agilismoftw » Dom, 11 Ene 2009 21:37

Si no me equivoco en el UTF-8 las vocales acentuadas, ñ y otros caracteres están formados por dos caracteres (si pones variablestring:="é" y en un bucle for imprimes los cardinales te saldrán dos números).
Ponte traje, no seas cutre.
Avatar de Usuario
agilismoftw
Nihlathak
FUUUU
 
Mensajes: 1596
Registrado: Vie, 09 Nov 2007 21:50
Ubicación: Pontevedra / A Coruña

Siguiente

Volver a 1º [EI/ETIS/ETIX] Programación (Pro)

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados

cron