Nov 132014
 
Artículo Perl

En ocasiones, los textos que debe procesar un script perl,  procedentes de fuentes de datos externas, están escritos en letras mayúsculas. Por ejemplo, podemos encontrar un texto de la forma “INSTITUTO TECNOLÓGICO DE AGUASCALIENTES”. A la hora de visualizar esta información en una página web o en otro medio, puede resultar más atractivo presentar estos textos de manera que únicamente la primera letra de cada palabra esté escrita en mayúsculas: “Instituto Tecnológico de Aguascalientes”. En este artículo se explica cómo podemos realizar esta conversión en un script perl.

La respuesta rápida

Para quienes necesitan una respuesta rápida y no pueden entretenerse en los detalles, la siguiente sentencia realiza la capitalización de las palabras de un texto:

Con esta sentencia, el texto “INSTITUTO TECNOLÓGICO DE AGUASCALIENTES” queda convertido en “Instituto Tecnológico De Aguascalientes”

Explicación:

  • La expresión split /(\s+)/, $texto convierte el texto original en un array. Cada uno de los elementos del array contiene una de las palabras del texto original: “INSTITUTO TECNOLÓGICO DE AGUASCALIENTES” se convierte en  ( “INSTITUTO”, “TECNOLÓGICO”, “DE”, “AGUASCALIENTES”)
  • La función map { ucfirst lc } aplica a cada uno de los elementos del array los operadores lc y ucfirst. lc convierte todos los caracteres a minúsculas (“INSTITUTO” se convierte en “instituto”). ucfirst convirte el primer caracter a mayúsculas (“instituto” se convierte en “Instituto”)
  • Por último, la función join ' ', $array convierte de nuevo el array en un string, concatenando los elementos del array con un espacio en blanco como separador entre ellos. El array (“Instituto”,”Tecnológico”,”De”,”Aguascalientes”) se convierte en “Instituto Tecnológico De Aguascalientes”.

Trabajando con distintas codificaciones de caracteres

Los textos procesados por el script pueden proceder de distintas fuentes: Literales de texto en el propio script, ficheros de texto, bases de datos,… Y puede ocurrir que estos orígenes de datos estén almacenados utilizando distintas codificaciones de caracteres. De entre éstas, latin1 (ISO-8859-1) y Unicode (utf8) son las más habituales.

Para garantizar que la capitalización del texto funciona correctamente, hay que indicar explícitamente el tipo de codificación que utiliza el orígen de datos, y el tipo de codificación que se debe generar. En nuestro caso, añadimos al script de ejemplo las sentencias que indican que el literal de texto utilizado está codificado en utf8, y que la salida que se imprime en pantalla también debe ser utf8:

Para otros casos, se puede consultar una explicación más detallada en el artículo Cómo trabajar en Perl con distintas codificaciones de caracteres de este mismo blog.

Tratamiento de Excepciones

En el texto de ejemplo que hemos estado utilizando, la preposición “DE” que aparece en el texto original también se ha capitalizado, convirtiéndose en “De”.

También podemos encontrar palabras como “IPHONE”, “ITUNES”, que deberían ser transformadas en “iPhone”, “iTunes”, y no en “Iphone”, “Itunes”

Para conseguir el resultado deseado en estos casos, deberemos añadir código adicional para tratar estas excepciones. La manera más sencilla es añadir una expresión regular para cada una de las excepciones que queremos tratar:

Referencias

Indice de artículos de programación en Perl

 Publicado por en 9:45 am

 Deja un comentario

(requerido)

(requerido)