J'ai un fichier .txt enregistré sur mon ordinateur. Je souhaite que mon application Automator ouvre le fichier .txt, puis déplace l'emplacement du curseur sur la première ligne vierge du fichier.
Par exemple, j'ai un fichier .txt intitulé Mon Fruit Log.txt enregistré sur mon ordinateur. Voici à quoi peut ressembler le contenu du fichier .txt:
Donc, dans l'exemple ci-dessus, je veux que le fichier soit ouvert, puis le curseur déplacé vers la deuxième ligne du fichier.
Remarque: ce n'est pas nécessairement la deuxième ligne du haut à laquelle je souhaite que le curseur soit envoyé. Selon le texte qui a déjà été écrit dans le fichier, je souhaiterais peut-être placer le curseur sur une ligne inférieure. Par exemple:
Dans le cas ci-dessus, je voudrais que le curseur soit déplacé à la sixième ligne.
L'emplacement où je veux que le curseur soit toujours au moins la deuxième ligne en partant du haut, mais il pourrait être aussi bas que la septième ligne en partant du haut.
Ainsi, le moyen le plus fiable d’articuler où je veux que le curseur soit placé est "sur la première instance d’une ligne vide dans le fichier".
J'ai déjà le code pour ouvrir le fichier dans TextEdit (emprunté à la première réponse de cette question Stack Overflow ):
set Target_Filepath to POSIX file "/Users/Me/Desktop/My Fruit Log.txt"
tell application "Finder" to open Target_Filepath
Maintenant, j'ai besoin du code pour déplacer le curseur. L'emplacement par défaut du curseur est la première ligne du fichier.
la source
Réponses:
Je ne sais pas s'il existe un moyen simple ou agréable de faire ce que vous demandez. En d'autres termes, vous ne pouvez pas simplement dire quelque chose comme cela
open target file and move cursor to first empty line
, mais le code ci-dessous le fera.Le code ci-dessus est codé pour ouvrir le fichier texte dans TextEdit, comme
open -e
dans la deuxièmedo shell script
commande. Il est codé de cette façon, car System Events doit savoir où envoyer les séquences de touches fléchées vers le bas . Si vous souhaitez un autre éditeur de texte, supprimez-le
-e
et laopen
commande l'ouvrira dans l'application que l' extension de fichier .txt est enregistrée pour pouvoir l'ouvrir. Ensuite, vous devrez également changer:À:
Et remplace:
Avec:
delay 1
Dans la première
do shell script
commande ,awk
obtient le numéro de ligne de la première ligne vide et la sortie, et c’est ce qui permet de calculer le nombre de frappes de la flèche vers le basrepeat
.J'ai légèrement modifié ma réponse initiale pour me débarrasser de la
delay
commande, mais je voulais ajouter ma réponse à la réponse de adc tout en éliminant tout lemenu_click
contenu.Mise à jour:
Le code ci-dessous a été modifié à partir du code ci-dessus en haut de ma réponse, et non de ma réponse à la réponse de arc, bien qu'elle puisse également s'appliquer ici, afin de résoudre le problème rencontré par TextEdit lors de l'écriture de deux retours à la place au lieu des deux retours attendus et normaux. la ligne est utilisée pour une ligne vide après une ligne contenant du contenu ou deux lignes vides dans une ligne.
Remarque: Bien que le code modifié fonctionne avec votre fichier testfile.txt à partir du lien de votre commentaire, je ne souscris pas personnellement à cette solution de contournement et rechercherais plutôt la cause première du problème et le corrigerait ainsi que vos fichiers!
la source
delay 1
d'delay 10
être en sécurité; cependant, il n’a pas déplacé le curseur. Ensuite, j'ai insérédisplay dialog firstEmptyLineNumber
après la deuxième ligne de votre code. Lorsque j'ai exécuté le code, une boîte de dialogue complètement vide est apparue. C’est le fichier .txt que j’utilise pour tester votre code. Lorsque vous utilisez ce fichier .txt, le code fonctionne-t-il correctement sur votre ordinateur?0D0D
entre les quatrième et cinquième lignes du fichier. Est-il possible d'éditer votre code afin qu'il puisse reconnaître les deux lignes vierges0D0D
ainsi0A0D
que de nouvelles?0D
place de0A
la norme sur un Mac. J'ai essayé de reproduire votre problème dans TextEdit sous OS X 10.11.6 et macOS 10.12, en procédant comme vous le dites et je ne peux pas le reproduire. Toutes mes fins de lignes sont0A
comme elles devraient être et par conséquent la ligne vide s'affiche comme0A0A
dans l'éditeur hexadécimal, deux sauts de ligne consécutifs comme il est supposé par défaut sur un Mac, et non deux retours à la ligne.delay
commande de votre code? Je pensais que vous aviez initialement inclus ladelay
commande pour garantir que les pressions de la flèche vers le bas ne se produiraient pas prématurément. (Ce n'est pas que ça me pose problème; je suis simplement curieux.)Voici un AppleScript pour TextWrangler permettant de passer à la fin du premier paragraphe d'un fichier texte:
En ajoutant une deuxième expression directement après
(?=\\r^\\r|\\A)
mais entre les guillemets, on devrait pouvoir passer à la ligne suivante. Puisque je ne sais pas ce que(?=\\r^\\r|\\A)
cela signifie vraiment, je ne peux pas vous aider davantage.la source
J'aborderais probablement ceci en utilisant quelque chose comme Ruby et TextMate: un script Ruby pourrait déterminer la ligne à choisir (probablement par une simple expression régulière) et même ajouter la date du jour suivant, le cas échéant. TextMate peut être appelé sur la ligne de commande pour déplacer le curseur sur une ligne spécifique, par
mate -l 7
exemple.Cela dit, utiliser uniquement AppleScript dans TextEdit et à
awk
partir des réponses de user3439894, un moyen un peu plus robuste de naviguer vers une ligne spécifique utilise l'élément de menu Evénements système et TextEdit "Sélectionner une ligne" (Commande + L).J'ai également utilisé une fonction de MacOSXHints car les scripts de menu dans AppleScript sont très pénibles. L'élimination de la fonction menu_click est un exercice pour le lecteur.
la source
menu_click
ça (ce qui est intéressant BTW) par deux lignes de code. Placez-letell application "TextEdit" to activate
juste avant letell application "System Events"
bloc et ajoutez-ykey code 37 using command down
(qui est ⌘L la touche de raccourci pour "Sélectionner une ligne ...") ou pluskeystroke "l" using command down
hautkeystroke firstEmptyLineNumber
dans letell application "System Events"
bloc. J'ajouterais aussikey code 123
(flèche droite) aprèskeystroke return
pour que la ligne ne soit pas en surbrillance.