AppleScript: ¿Cómo obtener el número de caracteres de un archivo .rtf?

Me gustaría un archivo .scpt de AppleScript para determinar el número de caracteres de cualquier archivo .rtf dado. No estoy seguro de si esto es estándar para el conteo de caracteres, pero me gustaría que cada carácter de espacio (" ") también cuente como un carácter.

Me gustaría que la secuencia de comandos logre esto, sin abrir el archivo en TextEdit.

Es importante tener en cuenta que se trata de un archivo de texto enriquecido, no de un simple archivo de texto sin formato (.txt). Este hecho complica las cosas. No es tan simple como cortar el encabezado de texto enriquecido, porque un solo archivo .rtf puede contener varios tipos diferentes de formato de texto enriquecido.

¿Cuál es la mejor manera de hacer esto?

Respuestas (1)

Usted preguntó: "¿Cuál es la mejor manera de hacer esto?" y aunque no tomaré esa determinación, sin embargo, aquí hay un ejemplo usando el do shell scriptcomando y algunas utilidades de línea de comando.

set theRichTextFile to quoted form of "/path/to/filename.rtf"
set theCharacterCount to do shell script "textutil -stdout -convert txt " & theRichTextFile & " | LANG=en_US.UTF-8 wc -m | sed 's/ //g'"

Tenga en cuenta que theRichTextFiledebe ser un nombre de ruta POSIX entre comillas.

Actualización: por comentario de @ jackjr300, agregado LANG=en_US.UTF-8al comando.

Nota: El Localeno está definido en ningún shell cuando usa el do shell scriptcomando, por lo tanto, el wccomando cuenta todos los caracteres ASCII en cualquier carácter compuesto. Ejemplo: el archivo RTF contiene " Здравствуйте! " (una palabra rusa), el wccomando devuelve 25 (caracteres ASCII). Para obtener el número correcto, establezca LANGalgún idioma con UTF-8 , así: do shell script "textutil -stdout -convert txt '/path/of/someFile.rtf' | LANG=en_US.UTF-8 wc -m | sed 's/ //g'"--> ahora, el wccomando devuelve 13 (caracteres)