Mac, Comment utilises-tu Applescript pour trouver un mot dans un fichier texte et s'il y a ce mot alors il fera quelque chose, mais s'il n'y est pas alors il fera autre chose?
Réponses
Trop de publicités?Dans Unix, il est très facile de trouver des mots dans des fichiers en utilisant des outils comme grep
, awk
, sed
, etc.
Ici, je suppose que nous pouvons créer un petit script shell pour trouver le mot que vous voulez dans un fichier texte en utilisant grep
et ensuite nous pouvons l'appeler directement depuis votre AppleScript comme indiqué ci-dessous:
Solution 1 Placer le mot de recherche et le chemin du fichier à l'intérieur d'un script shell.
Appelons le script shell: find.sh
:
#!/usr/bin/env bash
grep -w "chemin-du-fichier-texte"
Supposons que nous voulons rechercher le mot foo
dans un fichier appelé bar
Notre script shell ressemblera à ceci:
#!/usr/bin/env bash
grep -w "foo" "bar"
Note: grep -w
recherchera une correspondance exacte. Pour plus d'informations, consultez man grep
Sauvegardez le script find.sh
dans votre répertoire de travail.
Vous pouvez le tester en exécutant:
bash find.sh
Maintenant, vous pouvez appeler find.sh
depuis votre AppleScript de cette manière:
try
do shell script "bash /chemin-vers/find.sh"
on error
display dialog "aucun mot trouvé"
end try
Il est nécessaire de vérifier vous-même la validation en vous assurant de passer le nom de fichier et le chemin corrects (bar
dans notre cas) dans votre script.
Solution 2 Placer le mot de recherche et le chemin du fichier à l'intérieur de votre AppleScript.
Si nous pouvons garantir la validation de chemin d'accès correct, le script shell peut être simplifié davantage, surtout si vous voulez mettre votre mot de recherche et le chemin d'accès dans votre AppleScript.
Après simplification, find.sh
ressemblera à ceci:
#!/usr/bin/env bash
grep "$@"
Sauvegardez le script find.sh
dans votre répertoire de travail.
Vous pouvez le tester en exécutant:
bash find.sh "foo" "bar"
Et votre AppleScript ressemblera à quelque chose comme ceci:
try
do shell script "bash /chemin-vers/find.sh -w 'foo' 'bar'"
on error
display dialog "aucun mot trouvé"
end try
Utiliser un système grep
est presque toujours le moyen le plus rapide d'aller, mais si vous voulez une façon purement AppleScript de le gérer, ce n'est pas difficile :
sur 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
répéter avec monMot dans les theWords
if text of myWord is myString then set matchCount to matchCount + 1
fin répéter
si (matchCount) > 0 alors
return true
else
return false
fin si
fin grep
sur run {}
si grep("Dépassement", "Utilisateurs:jim:log.txt") then
afficher dialogue "Trouvé!"
fin si
fin run
Vous pourriez être beaucoup plus efficace à ce sujet aussi, y compris en sortant de la boucle répéter
après avoir trouvé le premier match. Mais, c'est très lisible et vous pouvez construire dessus pour faire ce que vous voulez.