【问题标题】:AppleScript convert variable that is a string into a listAppleScript 将作为字符串的变量转换为列表
【发布时间】:2019-10-18 22:50:28
【问题描述】:

我正在尝试在我的 AppleScript 中执行一个 shell 脚本,我在其中 grep 一个 CSV 文件并将一个列表返回到我的 AppleScript。

例如,我的 CSV 有行

01,{"tacos","burritos"}
02,{"burgers","hot dogs", "corn dogs"}

我的 AppleScript 设置为

set a to 01
set b to 02    
set myMenu to do shell script "grep " & a & " [path to CSV] | cut -d ',' -f 2")
    set menuChoice to (choose from list myMenu)
    display alert menuChoice

当我这样做时,我从列表中选择显示为列表中的一项,将菜单项显示为字符串,但我希望它们是单独的菜单项。

意思是我从列表中选择显示为:

{"tacos","burritos"}

代替:

tacos
burritos

【问题讨论】:

  • 您可以只使用 AppleScript,但读取文件或使用 shell 脚本的结果将是文本,因此您需要将其转换为列表。您的示例最简单的方法是运行带有结果的脚本,例如set myMenu to run script myMenu,但最好的方法是重组你的文件,这样你就可以在不使用列表语法的情况下获取项目。
  • 同意:如果可以的话,从 CSV 切换到 XML 或 JSON。两者都可以描述复杂的嵌套数据,并且易于使用现有的 AS 工具进行解析。

标签: arrays string list applescript


【解决方案1】:

我认为以下内容应该让您了解如何从 shell 脚本的输出中获取多个项目以填充 Applescript 列表。基本上,假设你的 shell 脚本是这样做的:

echo item1,item2,item3

您可以在列表中提供这 3 项供用户选择,如下所示:

osascript <<EOF
   set AppleScript's text item delimiters to ","
   set theList to every text item of (do shell script "echo item1,item2,item3")
   set menuChoice to (choose from list theList)
EOF

这会给你这个:


现在,更类似于您的问题,如果您使 CSV 看起来像这样:

01,tacos,burritos
02,burgers,hot dogs,corn dogs

然后您可以使用:

osascript <<EOF
set AppleScript's text item delimiters to ","
set theList to every text item of (do shell script "grep '^01,' my.csv | cut -d, -f 2-")
set menuChoice to (choose from list theList)
EOF

得到:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-14
    • 2020-12-13
    • 2019-04-11
    • 1970-01-01
    • 1970-01-01
    • 2010-09-30
    相关资源
    最近更新 更多