【问题标题】:Converting list of lists into org-table将列表列表转换为组织表
【发布时间】:2021-01-29 06:56:33
【问题描述】:

我有一个 lisp 数据(列表列表)

(setf *table-data*
   '((1 "Team1"
        (("member 1" "data1")
         ("member 2" "data2")
         ("member 3" "data3")))
     (2 "Team2"
        (("member 1" "data1")
         ("member 2" "data2")
         ("member 3" "data3")))))

当我尝试使用 (princ *table-data*) 将此列表转换为 org-table 时,我得到了输出,

| 1 | Team1 | ((member 1 data1) (member 2 data2) (member 3 data3)) |
| 2 | Team2 | ((member 1 data1) (member 2 data2) (member 3 data3)) |

org-table 只考虑最外面的列表元素。

但我想得到如下输出:

| 1 | Team1 | member 1 | data1 |
|   |       | member 2 | data2 |
|   |       | member 3 | data3 |
| 2 | Team2 | member 1 | data1 |
|   |       | member 2 | data2 |
|   |       | member 3 | data3 |

有没有可能做到这一点?

另外,我想将此表转换回列表列表而不是普通列表。

【问题讨论】:

  • @Drew,虽然它看起来像 elisp,但实际上我正在使用 sbcl 处理 clisp
  • 谢谢;我恢复了标签clisp

标签: emacs org-mode clisp


【解决方案1】:

[仅部分答案:此答案处理从 lisp 数据结构转换表的问题,就像 Org 模式所做的那样。]

您要生成的表的 lisp 表示如下:

#+begin_src emacs-lisp
(setq x '((1 "Team1" "member 1" "data1")
          ("" ""     "member 2" "data2")
          ("" ""     "member 3" "data3")
          (2 "Team2" "member 1" "data1")
          ("" ""     "member 2" "data2")
          ("" ""     "member 3" "data3")))
x
#+end_src

#+RESULTS:
| 1 | Team1 | member 1 | data1 |
|   |       | member 2 | data2 |
|   |       | member 3 | data3 |
| 2 | Team2 | member 1 | data1 |
|   |       | member 2 | data2 |
|   |       | member 3 | data3 |

正如您通过评估源代码块所看到的那样。

剩下要做的是将您想要的表示转换为该表示,反之亦然。

【讨论】:

  • 谢谢。我已经实现了这一点。当我从 org-table 转换为列表时,我得到了这个答案。问题是我有两个不必要的"" 用于表中没有元素的第一列和第二列。我必须手动编辑此列表结构以使其成为我的目的列表。
  • 没错:您必须编写一个函数,将您的表示形式转换为 Org 模式所需的表示形式(在适当的位置添加空字符串)。然后您编写另一个函数,将 Org 模式表示转换为您想要的表示(删除空字符串)。有时人们使用电子类比将这种转换功能称为“阻抗匹配”。
  • 喜欢阻抗匹配这个词。
猜你喜欢
  • 2018-12-19
  • 1970-01-01
  • 2018-01-06
  • 2012-06-05
  • 1970-01-01
  • 2022-09-27
  • 2016-09-28
  • 1970-01-01
相关资源
最近更新 更多