首页 > 解决方案 > 将列表列表转换为组织表

问题描述

我有一个 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")))))

当我尝试将此列表转换为时org-table,使用(princ *table-data*)我正在获取输出,

| 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 |

有没有可能实现这一目标?

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

标签: emacsorg-modeclisp

解决方案


[仅部分答案:此答案涉及从 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 |

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

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


推荐阅读