Ya vimos en este artículo cómo tener el recuento de caracteres en las aplicaciones de Word, Excel y Trados Studio. Ahora te daré una forma rápida de contar caracteres: ¡con AutoHotkey! Además, te servirá para cualquier aplicación, incluidas las tres aplicaciones de antes.
Índice
1.ª Macro para contar caracteres con AutoHotkey
Nos metemos ya de lleno en crear una macro de AutoHotkey para poder contar caracteres del texto seleccionado, así nos servirá para los dos casos prácticos de antes.
La macro de AutoHotkey que uso para conseguir el número de caracteres es la siguiente:
; ----------------------------------------------------------------- ; 1.ª macro para contar caracteres en AutoHotkey (con/sin espacios) ; www.gonduana.com/contar-caracteres-con-autohotkey ; ----------------------------------------------------------------- ; WIN + ALT + R retorno := "`r`n" #!r:: Clipboard= SendInput, ^c ClipWait, 0 cadena := Clipboard cadena := StrReplace(cadena, retorno, "") cadena := StrReplace(cadena, A_Tab, A_SPACE) caracteres := StrLen(cadena) StrReplace(cadena, A_SPACE,, espacios) caracteresSinEspacios := caracteres - espacios MsgBox 0, Recuento de caracteres, %caracteresSinEspacios% caracteres SIN espacios %retorno%%caracteres% caracteres CON espacios, 6 return
Te puedes descargar la macro desde aquí:
Explicación de la 1.ª macro
Antes de ejecutar la macro, selecciona el texto del que quieres conocer el número de caracteres y pulsa la combinación de teclas WINDOWS + ALT + R. Por supuesto, si no te gusta este atajo, puedes cambiarlo.
Una vez ejecutada la macro, se mostrará enseguida el siguiente cuadro de diálogo:
Veamos poco a poco la macro, por si quieres modificarla y dejarla a tu gusto:
En la línea 6 se define una variable retorno que es un retorno de línea (`n) más un retorno de carro (`r). Esta variable la usaremos más adelante. Paciencia, hermano…
Las líneas 8 a 10 copian el texto seleccionado en el Portapapeles de Windows.
La línea 12 pasa el contenido del Portapapeles a una variable llamada cadena, que será la que procesaremos para encontrar el número de caracteres.
La línea 13 borra los retornos. Para ello se emplea la función StrReplace, que sustituye la variable cadena por el tercer parámetro, una cadena vacía (""), es decir, se borra cada retorno del texto seleccionado. La cadena producto de las sustituciones de los retornos existentes se llama también cadena. Podríamos usar otro nombre, pero prefiero mantener el mismo. Esta línea está solo para igualar el número de caracteres que nos da la macro con los recuentos de Word. En la 2.ª versión de la macro te doy otra posibilidad.
Seguimos con la línea 14, en la que se reemplaza cada tabulación por un espacio. Así es como trata Word a las tabulaciones, lo cual me parece correcto. Como la línea anterior, también se emplea la función StrReplace, pero esta vez se busca una variable integrada en AutoHotkey, que es A_Tab y sustituye cada tabulación por un espacio (otra variable integrada, A_SPACE). La cadena producto de las sustituciones de las tabulaciones se llama también cadena.
La línea 15 emplea la función StrLen para contar los caracteres de la variable cadena y guarda en la variable caracteres el número de caracteres.
La línea 17 cuenta el número de espacios en el texto seleccionado. Para ello vuelve a emplear la función StrReplace para borrar cada espacio y guardar en la variable espacios el número de sustituciones realizadas. Como ya no necesitamos cambiar la variable cadena, descartamos la variable de salida sin los espacios.
La línea 18 es una resta: el número de caracteres sin espacios (variable caracteresSinEspacios) es igual al número de caracteres con espacios (variable caracteres) menos el número de caracteres encontrados en la anterior línea (variable espacios).
La última línea simplemente muestra en pantalla dos valores:
- el número de caracteres con espacios
- el número de caracteres sin espacios
El último parámetro de la función MsgBox es el número de segundos que la macro espera a que pulses el botón Aceptar para cerrar el cuadro de diálogo. Si transcurren esos segundos sin cerrarlo manualmente, entonces la macro cierra por ti el cuadro de diálogo. Para mí, 6 segundos es un tiempo suficiente; pero si necesitas más tiempo, aumenta ese valor a 10 o a 15, a tu gusto o borra ese último parámetro.
Unas palabras antes de la 2.ª macro
Como ya comenté, la línea 13 de la anterior macro borra los retornos simplemente para tratarlos igual que Word y, por tanto, para igualar el recuento de caracteres de Word.
Ahora bien, me parece más lógico convertir los retornos en espacios para así contarlos como espacios. De esta forma, el recuento diferirá del de Word, pero se asemejará al recuento de Excel o al que te da Twitter con su famosa limitación de caracteres por tuit.
De todas formas, ten en cuenta:
- que cada retorno son en realidad dos caracteres;
- que las diferencias de recuento entre esta macro y la de cualquier herramienta serán muy pequeñas.
En algún punto hay que parar y decidirse, porque hay una indefinición de qué es un carácter. Trados Studio, por ejemplo, sí cuenta 2 caracteres por cada retorno, como se aprecia en este segmento que solo tiene un retorno:
2.ª macro para contar caracteres con AutoHotkey
Con esto dicho, la macro que da un recuento más apropiado según mi criterio será:
; ----------------------------------------------------------------- ; 2.ª macro para contar caracteres en AutoHotkey (con/sin espacios) ; www.gonduana.com/contar-caracteres-con-autohotkey ; ----------------------------------------------------------------- ; WIN + ALT + R retorno := "`r`n" #!r:: Clipboard= SendInput, ^c ClipWait, 0 cadena := Clipboard cadena := StrReplace(cadena, retorno, A_SPACE) cadena := StrReplace(cadena, A_Tab, A_SPACE) caracteres := StrLen(cadena) StrReplace(cadena, A_SPACE,, espacios) caracteresSinEspacios := caracteres - espacios MsgBox 0, Recuento de caracteres, %caracteresSinEspacios% caracteres SIN espacios %retorno%%caracteres% caracteres CON espacios, 6 return
Explicación de la 2.ª macro
La única diferencia es la línea 13 resaltada, en la que se buscan los retornos (variable retorno) y se sustituyen por espacios (variable A_SPACE de AutoHotkey).
También te la puedes descargar desde aquí:
¿Cambiarías algo de la macro?
Por ejemplo, antes de contar los caracteres, podrías añadir una línea al principio para seleccionar todo el texto, así te evitas un paso.
Para ello, solo tendrías que insertar esta línea 11, justo antes de la línea 12:
SendInput, ^a
O quizás:
SendInput, ^e
Ten en cuenta que, en función de la aplicación, el atajo de teclado para seleccionar todo el texto será CONTROL+A o CONTROL+E.
Conclusiones
Ya hemos visto la macro para contar caracteres del texto seleccionado.
Es muy rápida, solo hay que acordarse del atajo de teclado que la ejecuta.
Tienes dos versiones, cada una trata los caracteres de retorno de una forma diferente. Pero tú puedes personalizar tu macro para que cuente los caracteres de la forma que tú quieres.
Por supuesto, queda prometido un artículo para contar las palabras de un documento.
⁂
¿Te lo vas a perder? Si no te lo quieres perder, suscríbete al boletín del blog, o sígueme en LinkedIn, Facebook o Twitter (@jssprt). De esta manera, serás el primero en enterarte de la publicación de los artículos.
Descubrí ayer la herramienta gracias a tu blog y me ha resultado fascinante. Muchas gracias por compartir.
A mi alcance están cosas tan simples como usar abreviaturas, autocorrecciones y atajos para introducir caracteres especiales, pero no sabría ir más allá. ¿Hay alguna forma de aprovechar esta macro para que el número de espacios con caracteres se quede en el portapapeles? ¿O que pueda copiar la cifra desde el cuadro de texto que genera la macro?
Hola, Noa:
Me alegro de que te resulte útil… O fascinante.
También empecé aprovechando AutoHotkey para las abreviaturas, pero todo es ponerse hasta el nivel que uno quiera.
No entiendo lo que quieres hacer con los espacios. Mira a ver este artículo sobre contar palabras, que de paso cuenta espacios. No sé si es esto lo que necesitas; si no, dame un ejemplo y lo vemos.
Un saludo,
… Jesús Prieto …
¡Uy! Disculpa, acabo de ver la respuesta.
Me refería a que si hay alguna forma de que el resultado (la cifra de los caracteres totales) se guarde en el portapapeles. Para que, de este modo, tras ejecutarlo solo tenga que ir a una hoja de Excel y pegar el valor en una celda.
En tu ejemplo, el cuadro da como resultado 3027 espacios totales. La idea es que se pueda copiar ese «3027» y pegarlo en cualquier sitio mediante el portapapeles. Intenté seleccionar el texto resultante tras ejecutarlo, pero no me deja.
Parece una función bastante absurda, ya que con memorizar la cifra o apuntarla sería suficiente, pero reconozco que soy nulo para memorizar números y no siempre tengo a mano algo para apuntar.
¡Un saludo!
Hola, Noa:
Para tener una variable en el Portapapeles de Windows, necesitas la variable interna Clipboard. Esta línea copia al Portapapeles el número de caracteres, que está en la variable caracteres:
Clipboard:= caracteres
Añade esta línea antes del return y ya está.
☛ Antes también pensaba que yo era un negado para memorizar números… Hasta que una chica me dio su número de teléfono (cosa rara en mi mundo), rápido y corriendo, sin posibilidad de apuntarlo en ese momento ¡y lo recordé durante muchos años, oye! Y es que, cuando hay interés, la realidad cambia con nosotros.
Muchas gracias, Jesús. Lo he introducido también en la macro para contar palabras, que al fin y al cabo va a ser la que utilice siempre. Es perfecto.
Voy a seguir aprendiendo a través de tu página. Dudo que llegue algún día a memorizar un número de teléfono al vuelo ni aunque me vaya la vida en ello, pero al menos quiero ser capaz de crear algunas macros por mí mismo. 🙂
Por cierto, he descubierto que la opción de «Avisarme cuando haya otros comentarios en este artículo» no está funcionando. Al menos conmigo. He revisado también el spam y no he visto notificación al respecto. ¯\_( ͠• ͜ʖ ͡•)_/¯
Gracias por avisar, Noa.
No sabía que no funcionaban las notificaciones… He cambiado un parámetro en la configuración de esa función; a ver si ahora recibes la notificación.
☛ Acabo de ver que no había insertado un enlace en un mensaje anterior, así que lo he añadido ahora.
Un abrazo,
… Jesús Prieto …
Me ha llegado. 🙂
Pues entonces era el ajuste que acabo de cambiar.
¡Mil gracias!