Curso Applescript: propiedades del texto, por Julifos

Vamos a asumir que vd., persona humana, nunca ha programado ni nada que se le parezca. Pues brevemente le explico que el texto tiene propiedades, al igual que cualquier cosa en este mundo.

Una propiedad, por ejemplo, es la longitud:

length of “kakafutis” –> 9

Otra propiedad es el tipo de texto. Por ejemplo, texto plano, texto con estilo o texto con codificación UTF.

Y el texto se compone de cosas como párrafos, líneas, palabras y caracteres.

El texto plano se llama en AppleScript string. El palabro text es, básicamente, lo mismo. Y también podemos encontrar styled text, que es una mezcla de texto plano con información acerca de los estilos (negrita, tipo de letra, tamaño, etc.). Y también tenemos cosas raras, como el international text y el unicode text, que es lo mismo, pero con soporte para texto chino, por ejemplo, ya que el “string” o el “text” sólo utilizan los 256 caracteres ASCII.

Ahora vamos a fijarnos en lo más sencillo y útil, que es el texto plano. Para ello, primero hemos de entender que el “texto” que vamos a ver no tiene nada que ver con letras. De hecho, lo que Quark o Safari entienden por texto, no tiene nada que ver con este asunto. Nosotros vamos a ver el tratamiento que se da al texto en AppleScript. Si estuviéramos trabajando, por ejemplo, con Tex-Edit Plus o Word, podríamos aplicar una negrita a todas las letras “ñ” del documento. Pero eso son características especiales de la aplicación, y ahora no nos interesan.

Elementos del texto

Como ya hemos dicho, el texto se forma de “cachos” más pequeños. Son éstos:

set elTexto to “esto es algo de texto”

paragraphs of elTexto –> {“esto es”, “algo de texto”}

words of elTexto –> {“esto”, “es”, “algo”, “de”, “texto”}

characters of elTexto –> {“e”, “s”, “t”, “o”, ” “, “e”, “s”, “

” , “a”, “l”, “g”, “o”, ” “, “d”, “e”, ” “, “t”, “e”, “x”, “t”, “o”}

Párrafos, palabras y caracteres.

Podemos utilizar algunas keyword para referirnos a ciertos caracteres especiales, como return (lo que sale al presionar “enter” en el teclado, que es el carácter ASCII 13), space y tab. Por ejemplo:

set elTexto to “kaka” & space & “futis” –> “kaka futis”

Operadores de texto

No hay muchos operadores de texto, como podés imaginar. De hecho, casi ni existe dicho concepto. Pero vamos a ver cómo se comporta el texto al mezclarlo con otras cosas.

El último ejemplo nos mostraba una concatenación de texto. Es el operador &. Su uso está muy claro, ¿no?

También podemos hacer esto:

“a” < “b” –> true

¿Qué es esto? Pues el operador < (menor que) es un comparador. En este caso, nos dice si la letra "a" es menor que "b", alfabéticamente hablando. > (mayor que) funciona de la misma manera. Y como no podía faltar, = (igual) sirver para saber cuándo dos cachos de texto son iguales. Por ejemplo:

“e” = “E” –> true

¿Eeeeeeeeeeeh? Pues sí. AppleScript, por defecto, no ve tres en un burro. Ignora por completo el hecho de que una letra sea mayúscula o minúscula. Hay otras cosas que también pueden afectar a la percepción del texto. Veamos las constantes.

Constantes de texto

Las constantes de texto son unas cosillas que hacen la puñeta y que, en mi opinión, no sirven para mucho. Son las siguientes: case, diacriticals, expansion, hyphens, punctuation y white space. Se utilizan únicamente en “considering” e “ignoring statements”. O sea, y sin esforzarnos mucho para traducir, para ignorar o tener en cuenta dichos elementos en una comparación entre dos textos.

Como acabamos de ver, AppleScript, por defecto, ignora por completo el case de los string. Pero podemos decirle que no lo haga:

considering case

 “e” = “E” –> false

end considering

Los “diacriticals” son los acentos (ej, “á”). La “expansion”, los caracteres expandidos (ej, “æ”). Los “hyphens”, pues… esto y similares: “-“. La “punctuation”, lo que expresa (ej, “,” o “:”). Y el “white space”, los caracteres parecidos al espacio (” “). Un sólo ejemplo, y lo demás lo dejo a la imaginación:

ignoring case, punctuation, white space and hyphens

“a” = “- A;,.:” –> true

end ignoring

otras operaciones con texto

Por ejemplo, podemos hallar la posición de un texto dentro de otro texto utilizando offset of:

offset of “a” in “kakafutis” –> 2

offset of “kakafutis” in “eres un kakafutis” –> 9

Y también podemos preguntar si cierto texto está dentro de otro texto, o si un texto empieza o termina con un texto en concreto (is in contents, ends with, starts with):

“kakafutis” is in contents of “eres un kakafutis” –> true

“kakafutis” is not equal to “kaka” –> true

“kakafutis” contains “kaka” –> true

“eres un kakafutis” ends with “kakafutis” –> true

“eres un kakafutis” starts with “kakafutis” –> false

Dado que, por ejemplo, AppleScript ignora las mayúsculas por defecto, o que puede haber otras circunstancias que alteren el chequeo de si “x” está contenido en “eres un x”, yo prefiero utilizar siempre para dicha búsqueda “offset of”, que sí tendrá en cuenta todos los factores. Cuando digo “otras circunstancias”, me refiero por ejemplo a “referencias”. Veámoslo con un ejemplo:

repeat with x in “kaka”

 if x = “a” then beep

end repeat

Para el que no esté familiarizado con la estructura de control “repeat”, que sepa que en este ejemplo concreto, se chequeará 4 veces (la longitud de “kaka”) si la variable “x” es igual a la letra “a”. En cada caso, “x” toma el valor del item que corresponde (alternativamente: “k”, “a”, “k” y “a”).

Pero nunca oiremos un “beep”, ya que “x” nunca será igual a “a”, porque “x” tomará un valor referencial:

item 2 of “kaka”

Si por el contrario utilizásemos “offset of”, sí tendríamos el beep.

repeat with x in “kaka”

 if (offset of “a” in x) = 1 then beep

end repeat

Pues eso.

text item delimiters

En posterior artículo.

coercions

Una coercion es el hecho de convertir una cosa a otra. Por ejemplo:

“45” as integer –> 45

27 as string –> “27”

14 as real –> 14.0

Y hay algunas cosas que podemos convertir a texto y viceversa. Por ejemplo, un número entero (ver el penúltimo ejemplo, el de “27 as string”). Un número real es un número con decimales, por decirlo de manera simple. Y para convertirlo a texto, AppleScript utiliza nuestro delimitador de decimales del sistema. Por ejemplo, en un sistema operativo americano, por defecto sería:

14.72 as string –> “14.72”

Pero en uno español:

14.72 as string –> “14,72”

Y lo mismo a la inversa:

“14,72” as real –> 14.72 (devolvería error en un sistema US)

También podemos convertir a texto una lista de elementos compatibles (que son texto y números):

{“kaka”, 14.72, 12.3, “futis”, 8} as string –> “kaka14,7212,3futis8”

Y, a la viceversa, podemos convertir texto a números, e incluso listas:

“13” as number –> 13

“kaka” as list –> {“kaka”}

items of “kaka” –> {“k”, “a”, “k”, “a”}

text items of “kaka” –> {“k”, “a”, “k”, “a”}

Para más complejidades, visite vd. el capítulo de text item delimiters. (artículo a publicar)

¿Qué diferencias hay entre “items” y “text items”? Visite vd. el capítulo de text item delimiters. (artículo a publicar)

más cosas raras

Tampoco son rarísimas. Como hemos dicho, tenemos más tipos de texto: styled text, international text, Unicode text. Y aún mas: styled clipboard text o scrap styles, C stringy Pascal string.

Como no estoy muy seguro de que a nadie le interese qué es una “Pascal string” ni nada de lo enumerado, simplemente voy a decir brevemente que OS X ha tomado muy en serio el “Unicode text” y lo está implementando para todo. Por ejemplo, los “path” funcionan en unicode (eg, alias “disco:folder:file.txt”) y también los resultados devueltos por la shell, en los comandos “do shell script”. Así que Apple trabaja apresuradamente para implementarlo por completo en todo el sistema.

El texto Unicode es, básicamente, una especie de tabla ASCII pero a lo bestia, donde se pretenden contener todos los caracteres que existen. Para almacenar dichos caracteres se utilizan 16 bit (o sea, el doble que para un carácter ASCII), y las múltiples combinaciones nos dan tanto los caracteres ASCII como el resto de caracteres (tipo cirílico, griego, árabe, chino…). Para aprender AppleScript esto no nos importa mucho, a no ser que estemos muy interesados en algo relacionado. Pero está bien este puntillo para terminar la lección. Un saludo.

Los restantes artículos sobe AppleScript se pueden encontrar en la categoría de Tutorial

0 0 votos
Article Rating
Subscribe
Notify of
6 Comments
Oldest
Newest Most Voted
Opiniones Inline
Ver todos los comentarios
Anónimo
Anónimo
19 years ago

Lo del valor referencial y que no funcione

repeat with x in “kaka”
if x= “a” then beep
end repeat

me ha dejado de piedra, pero ¿no es más fácil entonces

repeat with x in “kaka”
if (x as string = “a”) then beep
end repeat

¡gracias!

Anónimo
Anónimo
19 years ago

Hola, ende!

El ejemplo sirve para ilustrar cómo funcionan las referencias en una estructura de control “repeat” (no es que estuviese tratando de encontrar una “a” realmente). Y el ejemplo subsiguiente es para ilustrar un posible uso de “offset of”.

Por supuesto, convertir la referencia a “string” (tu ejemplo), es perfectamente válido, si lo que tratas es de saber dónde está la “a” 😉

Anónimo
Anónimo
19 years ago

julifos, gracias por tu página !!! 😉

Anónimo
Anónimo
19 years ago

El ejemplo sirve para ilustrar cómo funcionan las referencias en una estructura de control “repeat” (no es que estuviese tratando de encontrar una “a” realmente).bueno eltexto un conjunto de ideas relacionadasque giran entre si alrededor de un mismo tema conuna finalidad especifica

Anónimo
Anónimo
18 years ago

quiero saver que esla propiedad de los numeros enteros pero que sea lla ases tu entiendes yes

Anónimo
Anónimo
17 years ago

hola amigo kuiero propiedades de textos ps amigos hay si no amiogo

6
0
Me encantaría saber tu opinión, por favor, deja un comentariox
()
x