article_image

本文核心思路已经在 UTGD Premium 第4期发布,并应会员要求提高发布优先度。 希望提前获知主笔观点,与主笔讨论,令主笔第一时间答疑本站内容相关问题,支持 UTGD 发展等,请考虑 成为 UTGD 会员

如何保存 Shortcuts 某次的运行结果?或者说,怎么调取 Shortcuts 上次运行的结果?对于 Shortcuts 来说一直是个重要的问题。这个问题关系到捷径到底能处理多复杂的需求,关系到它是个小玩具还是可以做更多的事。

到了捷径(当时还叫捷径)的 1.5.3 版本,这个问题才体面地被解决了。除了因为在这个版本,捷径终于可以与一些网络服务的 API 互动之外,也因为彼时也同样是在线表格编辑工具 Airtable 在慢慢扩大影响的时候。所以人们很快将联合这两个在效率工具圈频频露面的工具。捷径从此得以与表格挂钩,也就是可以产生、读取和追加信息到表格。1

实际上,Shortcuts 一直都可以直接将每一次运行的结果保存到本地,只不过不太“体面”。在 API 互动的功能出现之前,就可以通过系统应用(备忘录、提醒事项等)来保存信息、读取信息。然而通过系统应用是个变通方法,它生成的内容格式过于受限,使用场景也因此受限。所以只能说是应急,和处理表格这个级别的能力还相去甚远。

令人难以置信的是,通过 Shortcuts “创建、读取和修改表格” 的通用解决方案,一直都存在,而且无比简单。它来自于一个在效率圈总是作为“附带一句”被提起,却又几乎被所有相关工具支持的格式——CSV。

其实,Shortcuts 可以与 CSV 联动这个点早已被人发现。搜索一下也可以发现星星点点的思路和做法。只是人们对 CSV 这个格式过于不敏感,导致它的话题性比起华丽的 Airtable 差了太多。但是 CSV,Comma-Separated Values(逗号分隔值),是个应该更多地被注意到和使用的格式。因为它的纯文本与直接和 Excel 互通的特性,它特别值得 Power User 的注意。

越是使用多个操作系统、多个效率工具的 Power User,就越应该了解像 CSV 这样**每个操作平台、每个相关效率工具都支持的,纯文本的格式。**而 CSV 还是其中规则特别简单易学的。

得益于 CSV 格式是纯文本,它的另一个明显好处就是非常容易修改。很多 Excel 表格处理上的问题,都可以使用各位 Power User 熟悉的自动化工具搭配 CSV 来解决。朋友可能认为你很懂科技所以很懂电脑又所以很懂 Excel 然后拜托你解决一些 Excel 问题。但他不知道你根本无法忍受那种东西。这时候很大概率你可以通过 Shortcuts + CSV 的组合来挽尊。

CSV 简单介绍

根据本站 UTGD 所涵盖的内容范围和主张。作为纯文本格式的 CSV 是一种以后经常被提起的格式。

Alt text
上方的 CSV → 下方表格

看到图片熟悉 Anki 的朋友想必已经明白了。并不需要每次都在电脑前用 Excel 来做内容然后导入 Anki,而是可以在任何地方,用各种设备来随时向 Anki 发送单词。

CSV文件:纯文本→表格

简单来说,CSV 就是可以让你输入纯文本但生成表格的格式。所以当你马上要做一张简单的表,或者需要用到表格这种格式,但手边没有“重武器 Excel”的时候,请在脑子里“表格”这个词的旁边放上一个“轻武器 CSV”的词条。

纯文本 → CSV → 表格

纯文本代表它对输入工具没有要求,使用难度极低。能打开个文本编辑器,你就能用 CSV,也就是说,你可以制造表格。

CSV 文件的基本写法

CSV 有几条规则和规范,但记住以下两条,足以应对大多数场景都问题。

  1. 分隔符,一般是逗号 ,
  2. 牵涉到换行,用半角引号 " 把内容引起来

接下来分别展开说明一下(附带实例)。

分隔符,就是让电脑知道,“这个符号可以区分前后的内容,把1段内容划为2个表格”。它一般是逗号 , 实际上,CSV 这个缩写,展开就是 Comma-Separated Values,逗号分隔值。

比如我们要记住“戦々恐々”这个日语单词的意思,我们可以写:

戦々恐々, 战战兢兢,心惊胆战

因为 CSV 它必须要用半角逗号,来分隔内容,所以中文里使用的全角逗号没有分隔内容的作用。

现在再来看换行等特殊情况。做表格我们一定会遇到换行的情况。比如做 Anki 卡片,一个单词有多个意思,一个知识点有多个要点:

冴える,"勘がさえる 直觉敏锐 技がさえる 手艺高超 月がさえる 月色"

这种时候,我们通过半角引号"来告诉 CSV,包着的内容都在一个格子里,不要分开。哪怕里面有用于分隔内容的分隔符半角逗号,也都要塞在同一个表格里。

Alt text
用半角引号包裹换行,将内容保存在同一个格子(Cell)里

以记录新冠人数为实例在 iOS 上用 Shorcuts 结合 CSV

2021 年中旬左右,日本的新冠阳性人数从数千上升到 5 位数。当时的我还没有脱敏,所以希望对每日新冠人数有个整体的把握,所以就制作了一个 Shortcuts,在每天早上告诉我有多少新的阳性,并且把记录保存到 CSV。

Alt text
通过自动化,每天早上 Shortcuts 会通知我阳性新增人数

这个 Shorctus 我一直用到 2022 年中旬,后因为以下三个原因停止使用:

  1. 已经对感染人数脱敏
  2. 换手机后自动化没有同步,也是因为这个经历,我才发现自己已经对感染人数脱敏
  3. 我调用感染人数的 API 后来也停止维护
Alt text
从去年 5 月我开始记录日本的新冠新增人数

不过因为这确实是我真实使用的例子,所以在此还是决定以它为例来说明通过 Shortcuts 使用 CSV 的技巧。

我们一般和表格产生的基础交互有 4 种:

  1. 创建内容
  2. 获取内容
  3. 追加内容
  4. 删改内容

这 4 种通过 Shortcuts 和 CSV 的组合都可以解决。 而且 Shortcuts 创建/追加/删减/获取 CSV 的所有方法,包括在 macOS 上突破沙盒限制来读写文件的方法,可以在处理其它纯文本文件时直接套用。

注:因为删改内容相对比较麻烦,且在 iOS 环境下用 Shortcuts 删改 CSV 实用程度较低,所以在此不涉及。如果有想要详细讨论的,请考虑 成为本站会员加群 提问。我将第一时间为你解答。

创建

首先,最好先在 iCloud Drive 里的 Shortcuts 文件夹,创建一个 CSV 文件。文件名随意,我在当时起的名字是“新冠统计.csv”。

Alt text
在 Shortcuts 文件夹创建名为“新冠统计.csv”的 CSV 文件

为了日后方便以表格形式查看,用其他软件处理,我们可以做一个表头。在 CSV 中制作表头,就是在第一行写上表头的各项内容,以半角逗号,分隔:

Alt text
在 CSV 文件里制作表头

必须要创建在 iCloud Drive 里的 Shortcuts 文件夹是因为 iOS 上的 Shortcuts 无法在这个文件夹之外添加内容2

要突破这个限制,可以选择的做法有两个:

  1. 使用 Dropbox。但使用 Dropbox 本质上和放在 iCloud Drive 里是一样的,都不是在“任意位置”添加内容,而只是在一个限定了的文件夹里。
  2. 在 macOS 上做这件事。macOS 可以使用“运行 Shell 脚本”这个动作来在任意位置读写文件。

添加内容

接下来,我们就可以往这个文件里添加内容了。这只需要两个动作:

Alt text
为 CSV 文件添加内容,只需要“文本”和“追加到文本文件”两个动作

在文本框内我们看到了各种变量。这些变量当然都是从 API 中获取的各项数值。但是因为前述的脱敏和 API 失效等原因,我如何从 API 获取这些数值的部分就不再有参考意义。

至于这些如何获取国内新冠人数的 API,网上应该随手可查。至于如何在 Shortcuts 中调用 API,我也在2016年就写过文章,后面也写过教程。不了解的话可以加入本站 Slack 群,我可以将相关内容发给你。总之,API 相关内容不是本教程的重点,展开将过于繁琐,在此按下。

回到正轨,所以如上图所示,对于要记录新冠感染人数这件事来说,我们完全用不到半角引号,只是在用半角逗号来区分一些数字,就做出了其它工具里都可以使用的表格。

鉴于大家读到这篇文章时,很难马上结合 API 做出完整功能的 Shortcuts,我这里放一段数据,可以直接复制粘贴到 Shortcuts 里的文本框里。再结合“追加到文本文件”,就能直接体验给表格追加一行内容:

2021-08-12,10866,129496,1055203,8.39%
Alt text
添加内容后返回的结果

获取

获取有两个含义,一个是获得文件的全部内容。一个是精确获取某一行某一列的内容,作为查询。

获取 CSV 全部内容在 Shortcuts 中要用的动作是“获取文件夹中的文件”:

Alt text
通过 “获取文件夹中的文件” 获得 “新冠统计.csv” 后的结果

而精确获取某一行某一列的内容稍微有点点麻烦,需要用到多个技巧。

举例来说,我们要获得 2021 年 8 月 13 日这一天的新增阳性的人数。那么它在 Shortcuts 里的方法是,先找到 2021 年 8 月 13 日这一行,再找到第二项(因为第二项是当天的新增人数)。

第一步,找到 2021 年 8 月 13 日这一行非常容易,因为 CSV 是纯文本,我们只要用“匹配文本”即可:

Alt text
使用“匹配文本”获取 2021-08-12 这一行的内容

第二步,获取第二项。这也是 Shortcuts 的入门级操作。我们先用“拆分文本”,以半角逗号,为分隔符,把这一行内容拆开,然后在用“从列表中获取项目”,获取索引第2项的内容即可:

Alt text
成功获取到 2021 年 8 月 13 日的新增人数

附:macOS 上 Shortcuts 的特权:写入文件夹不受限制

如果你的主要工作环境是 macOS,那么你应该看一下《用 Shortcuts 制作 Stand-up meeting 模板》这篇文章的“在 Shortcuts 利用 Shell 命令做好本地备份”这一章节。在这一章节,我介绍了通过“运行 Shell 脚本”这个动作,让 Shortcuts 摆脱沙盒,在 macOS 系统上任何一个位置读写文件的方法。这个方法与《用 Shortcuts 制作 Stand-up meeting 模板》这篇文章的其它部分没有必然联系,可以单独掌握。


  1. 当然,自从捷径对请求报文的方法有了更完整的支持,更深更狠的玩法一直存在。比如为了储存和读取信息直接自己搭建服务器等。
  2. 但 iOS 上的 Shortcuts 可以在这个文件夹里嵌套文件夹。