Q: Запись CSV в переменную локацию - PullRequest
0 голосов
/ 04 декабря 2018

Очень плохо знаком с AppleScript и безуспешно искал решения в других местах, извиняюсь, если просто пропустил ответ в другом месте.Спасибо за любую помощь.

Справочная информация : Я использую AppleScript, чтобы запросить у пользователя каталог, а затем создать многочисленные папки в этом каталоге с другими подсказками.По мере ответа на запросы я хочу создать CSV, в котором записываются эти ответы, чтобы предотвратить повторные ответы, а также позволить пользователю завершить сценарий и вернуться позже, не теряя элементы, хранящиеся в списках.CSV кажется самым простым способом сделать это.

Вопрос - если я нацелив CSV на статический путь, я могу успешно создать CSV и записать в него.Если я создаю путь из приглашения, я получаю сообщение об ошибке: Средство поиска обнаружило ошибку: не удается сделать псевдоним "Macintosh HD: пользователи: MyAccount: _Sample_Directory:" в константе типа.число -1700 от псевдонима "Macintosh HD: пользователи: MyAccount: _Sample_Directory:" к константе

Чего мне не хватает?

FYI- с использованием в качестве основы для WriteToфункция.

Пример сценария:

set MyList to {"A", "B", "C"}

tell application "Finder"
    --This Works, but doesn't nest in the variable folder--
    --set CSVFile to (path to desktop as text) & "List.csv" 

    --This is the goal:dynamic directory--
    set ParentFolder to (choose folder with prompt "Select Folder")

    set CSVFile to (path to ParentFolder as string & "List.csv") as POSIX file as alias
end tell

set TheResult to writeto(CSVFile, MyList, list, true)

on writeto(targetFile, theData, dataType, apendData)
    try
        set openFile to open for access file targetFile with write permission
        if apendData is false then set eof of openFile to 0
        write theData to openFile starting at eof as dataType
        close access openFile
        return true

    on error
        try
            close access file targetFile
        end try
        return false

    end try
end writeto

1 Ответ

0 голосов
/ 04 декабря 2018

В вашем скрипте не нужно сообщать приложению «Finder».Таким образом, вы можете удалить Tell / End Tell.

Ошибка в вашем скрипте происходит из строки:

set CSVFile to (path to ParentFolder as string & "List.csv") as POSIX file as alias 

Ваша подпрограмма writeto принимает целевой файл в виде строки, например:

"Диск: пользователи: я: папка: list.csv.

Поэтому ваша первая строка может быть уменьшена до:

set CSVFile to (ParentFolder as string) & "List.csv"

Да, вы можете записать свои данныев CSV. Но я не уверен, что это лучший выбор. Когда вы пишете список {"A", "B", "C"} в вашем файле, вы не пишете текст. Таким образом, Applescript выполняет преобразование из списка вtext. В этом примере результатом является «listutxtAutxtButxtC». Это зависит от того, что вы хотите сделать с этим файлом, но чтобы сделать его читаемым, лучше писать текст в текстовом файле. Это можно сделать, просматривая все элементы MyList.записать каждый из них в виде текста:

repeat with x in MyList
    set TheResult to writeto(CSVFile, x, list, true)
end repeat

В приведенном выше примере я все еще использую datatype = list вместо текста. Это не имеет значения, поскольку подпрограмма не использует этот параметр. Я полагаю, что это длябудущее использование.

Тем не менее, это может не дать вамрезультат, который вы ищете.Текст в файле будет "ABC".Чтобы избежать этого, я предлагаю вам добавить возврат (или вкладку) для всех данных, которые вы записываете в файл.Для этого измените строку в подпрограмме writeto:

write (theData & return) to openFile starting at eof as dataType 

Тогда ваш cvs-файл будет

A
B
C

, который легко читается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...