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?
Respuestas
¿Demasiados anuncios?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
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.