0 votos

Applescript para encontrar una palabra en un archivo de texto

Mac, ¿Cómo se usa applescript para encontrar una palabra en un archivo de texto y si hay esa palabra entonces hará algo, pero si no la hay entonces hará otra cosa?

1voto

Rakib Fiha Puntos 11

En Unix, es muy fácil encontrar palabras en los archivos utilizando herramientas como grep , awk , sed etc.

En este caso, creo que podemos crear un pequeño shell script para encontrar la palabra deseada en un archivo de texto utilizando grep y luego podemos llamarlo directamente desde su AppleScript como se muestra a continuación:

Solución 1 Poner la palabra clave de búsqueda y la ruta del archivo dentro de un shell script.

Llamemos al shell script: find.sh :

#!/usr/bin/env bash

grep -w <search-word> "text-file-path"

Supongamos que queremos buscar la palabra foo en un archivo llamado bar

Nuestro shell script tendrá el siguiente aspecto:

#!/usr/bin/env bash
grep -w "foo" "bar"

Nota : grep -w buscará una coincidencia exacta. Para más información, consulte man grep

Guarda el script find.sh en su directorio de trabajo.

Puedes probarlo:

bash find.sh

Ahora, puedes llamar a find.sh de su AppleScript así:

try
  do shell script "bash /path-to/find.sh"
on error
  display dialog "no word found"
end try

Es necesario que usted mismo satisfaga la comprobación de sanidad, asegurándose de que pasa el nombre de archivo y la ruta de archivo correctos ( bar en nuestro caso) en su script.

Solución 2 Poner la palabra clave de búsqueda y la ruta del archivo dentro de su AppleScript.

Si podemos garantizar la comprobación de cordura de la ruta de archivo correcta, el shell script puede simplificarse aún más, especialmente si quieres poner tu palabra clave de búsqueda y la ruta de archivo en tu AppleScript en su lugar.

Después de la simplificación, find.sh se verá así:

#!/usr/bin/env bash
grep "$@"

Guarda el script find.sh en su directorio de trabajo.

Puedes probarlo:

bash find.sh "foo" "bar"

Y su AppleScript se verá algo así:

try
  do shell script "bash /path-to/find.sh -w 'foo' 'bar'"
on error
  display dialog "no word found"
end try

1voto

CK. Puntos 923

Utilizar un sistema grep es casi siempre la forma más rápida de hacerlo, pero si quieres una forma pura de AppleScript para manejarlo, no es difícil:

on grep(myString, myFile)
    set fileHandle to open for access file myFile
    set theWords to words of (read fileHandle)
    close access fileHandle

    set matchCount to 0
    repeat with myWord in theWords
        if text of myWord is myString then set matchCount to matchCount + 1
    end repeat

    if (matchCount) > 0 then
        return true
    else
        return false
    end if
end grep

on run {}
    if grep("Overflow", "Users:jim:log.txt") then
        display dialog "Found it!"
    end if
end run

También podrías ser mucho más eficiente en este aspecto, incluso salir de la repeat después de encontrar la primera coincidencia. Pero, esto es muy legible y se puede construir sobre esto para hacer lo que quieras.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X