从 emacs 组织模式表中提取字段值

Extracting field values from emacs org-mode tables

分隔符:我是 emacs 新手。 我正在尝试制作一个通过 org-table 并提取特定值并对它们进行一些算术运算的函数。算法与我的问题无关,但我无法将字段值放入整数或浮点数列表中。

例如函数

(defun print-field-value()
  (interactive)
  (setq list '())
  (unless (org-table-p) (error "Not in an org-table"))
  (goto-char (org-table-begin))
  (org-table-next-field)
  (while (org-table-p)
  (add-to-list 'list (save-excursion (org-table-get-field 1)))
  (forward-line))
  (print list)
)

在 table

上执行时
|  7 |  8 |  9 | 10 | 11 | -12 |
| 78 | 46 | 00 | 36 | 64 |  98 |

产生输出

(#(" 78 " 0 4 (fontified t face org-table)) #("  7 " 0 4 (fontified t face org-table)))

我有两个问题要问社区: 1. 我列表中的这些元素是什么? (什么类型的物体或那些) 2. 有没有一种方法可以将整数放入列表中,以便我可以轻松地对值执行一些算术运算?

理想情况下,我正在寻找一种简单的方法来执行此操作,而无需创建另一个函数来分解上述函数 returns 并提取整数。我的直觉(可能有缺陷)是应该有更简单的方法来做到这一点。我说得对吗?

#(" 78 " 0 4 (fontified t face org-table)) 是一个字符串,在 C 中只记为 " 78 "。接下来,您不需要将结果打印到 return:在您的代码中使用 list 而不是 print list 就足够了。

如果您想发现 emacs 中的任何模式,请使用其所有函数都具有相同前缀的事实。在这里,运行 describe-function org-table- 并按 TAB 键两次以获取在 org 表上工作的所有函数的列表。然后您将看到有前途的函数 org-table-analyze,并阅读其文档。这样你可能会想到以下内容:

(defun get-field-values ()
  (unless (org-table-p) (error "Not in an org-table"))
  (org-table-analyze)
  (mapcar
   (lambda (i)
     (mapcar (lambda (j) (string-to-number (org-table-get i j)))
         (number-sequence 1 org-table-current-ncol)))
   (number-sequence 1 (1- (length org-table-dlines)))))

它将为您提供字段矩阵,作为数字列表的列表。注意这个功能不是交互式的,你 运行 它与 M-: