Прочитайте текстовый файл с помощью Automator.app построчно

Я новичок в кодировании, поэтому, пожалуйста, будьте терпеливы со мной.

Я создал рабочий процесс с Automator (OSX), который отлично работает. Единственная проблема, которая у меня есть, заключается в том, что я хочу, чтобы она работала на нескольких входах (то есть в виде партии). Я вставил действие Loop, но проблема, с которой я сталкиваюсь, заключается в изменении начального ввода каждый раз.

Я хотел бы использовать applescript для автоматизации ввода начального ввода каждый раз.

У меня есть файл TXT с URL-адресами. С помощью сценария Apple я хотел бы скопировать URL-адрес (или строку текста) в буфер обмена. В следующей итерации я хотел бы скопировать следующий URL-адрес (или строку текста).

Кто-нибудь может помочь?

Спасибо!!


person Haris Ahmed    schedule 20.07.2014    source источник
comment
Значит, весь аутматор должен делать только следующий? 1.) получить следующую строку из файла (1-я при запуске), 2.) скопировать строку в буфер обмена, 3.) начать заново? (зацикливание вручную (нажатие клавиши) или автоматически по счету?)   -  person jm666    schedule 21.07.2014
comment
@ jm666 Автоматизатор будет делать: 1. получить следующую строку из файла (1-я при запуске) 2. скопировать строку в буфер обмена 3. выполнить все оставшиеся задачи в рабочем процессе (это было выполнено мной, здесь нет проблем) 4 Цикл (автоматически по подсчету, также завершен мной, здесь нет проблем)   -  person Haris Ahmed    schedule 22.07.2014


Ответы (2)


Вы можете создать один циклический рабочий процесс (называемый LinesToClipboard.workflow), который будет

  • получить строку из текстового файла (не rtf или doc)
  • скопировать строку в буфер обмена
  • запустить текущий рабочий процесс
  • повторите цикл для следующей строки

Рабочий процесс:

  • Создать новый рабочий процесс автоматизатора
  • create a variable
    • at the bottom find the icon "Show or hide the workflow variables list" and show the workflow wariables (empty)
    • щелкните правой кнопкой мыши и "Новая переменная..."
    • назовите переменную как "LineNumber"
  • add actions:
    • Get Value of Variable (LineNumber)
    • Run Shell Script
    • оболочка: /bin/bash
    • Важно: измените Pass input на as arguments
    • добавьте следующий контент (точно скопируйте, со всеми кавычками и т. д.):
    • в содержимом скрипта измените /etc/passwd на полный путь к вашему имени файла, например /Users/myname/Documents/myfile.txt
    • по окончании этого действия в буфере обмена останется одна строка из файла
linenum=${1:-0}
filename="/etc/passwd" # full path of your text-filename
let linenum++
sed -n "${linenum}p" < "$filename" | pbcopy
echo $linenum
  • Set Value of Variable (номер строки)
  • Run Workflow - add your current workflow (or the "ShowClipboard.workflow" - see bellow)
    • the Wait for workflow to finish should be checked
    • важно Меню «Вывод» должно быть таким: «Вернуть ввод действия».
  • Loop
    • add your count...
  • Run Shell Script (игнорировать ввод этого действия), содержимое одной строки: echo 0 (это сбросит переменную LineNumber в ноль, когда цикл завершится)
  • Set Value of Variable (номер строки)

Для тестирования вы можете создать другой рабочий процесс с именем ShowClipboard.workflow с содержимым:

  • Get Contents of Cliboard
  • Set Value of Variable (клипвал)
  • Ask for confirmation (и перетащите (clipval) в поле сообщения)

Запустите первый рабочий процесс.

Скриншоты (наверняка) :)

введите здесь описание изображения

Второй рабочий процесс (для тестирования)

введите здесь описание изображения

person jm666    schedule 22.07.2014
comment
Работал как шарм!!! Абсолютно легендарно, приятель! Спасибо, целый день ютубинга и гугления не помог так, как ты! - person Haris Ahmed; 22.07.2014
comment
@HarisAhmed Наслаждайтесь;), Рад помочь. ;) - person jm666; 22.07.2014
comment
Thaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaаааааааааааааааааааааааааааааааааааааааааааааааааааааааасибо - person Husam; 03.03.2016

Вам не нужен AppleScript для получения URL-адресов, но вы можете напрямую извлечь их с помощью Automator с помощью задачи оболочки. После использования задачи, получающей содержимое папки (это задача Finder в Automator), добавьте задачу оболочки в качестве следующей задачи. Убедитесь, что вы выбрали отправку ввода в качестве аргументов, а не отправку на стандартный ввод. Когда вы это сделаете, вам понадобится только что-то вроде одного из следующих сценариев оболочки.

cat $@ | egrep -io '\S?(http|https|ftp|afp|smb|mailto|webcal):\S+''

Сначала он прочитал все файлы, используя cat. $@ — это переменная оболочки, которая содержит аргументы, собранные предыдущей задачей: список путей ко всем файлам пакетной папки. Мы передаем их в egrep, который будет выводить только URL-адрес, отфильтрованный их схемами. Если вы хотите поддержать любую схему (официальную и неофициальную):

cat $@ | egrep -io '\S?[A-Z][A-Z0-9+-.]+:\S+'
person dj bazzie wazzie    schedule 21.07.2014
comment
Я использовал сценарий оболочки, который вы мне дали, и он прекрасно работает.. ' cat $@ | egrep -io '\S?(http):\S+' ' Однако, поскольку все URL-адреса теперь обрабатываются вместе, Automator дает сбой в рабочем процессе примерно в 25% случаев. сейчас (но я ожидаю, что это будет происходить чаще, если будет вставлено больше URL-адресов). В идеале я бы хотел, чтобы он работал примерно с 75-100 URL-адресами. Вот почему я хотел, чтобы один URL-адрес проходил через весь процесс, прежде чем начинать со следующего. - person Haris Ahmed; 22.07.2014
comment
Я думаю, что это приведет к сбою, потому что он вернет ошибку, если файл не содержит URL. Вы можете добавить || true в конце команды. || является или, это означает, что в случае сбоя grep он вернет пустое значение, выполнив команду true. - person dj bazzie wazzie; 22.07.2014