【问题标题】:Extracting field values from emacs org-mode tables从 emacs 组织模式表中提取字段值
【发布时间】:2016-09-14 13:51:04
【问题描述】:

分隔符:我是 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)
)

在桌子上执行时

|  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. 有没有一种方法可以将整数放入一个列表中,这样我就可以轻松地对这些值执行一些算术运算?

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

【问题讨论】:

    标签: emacs org-mode


    【解决方案1】:

    #(" 78 " 0 4 (fontified t face org-table)) 是一个字符串,在 C 中它只会被记为" 78 "。接下来,您无需打印即可返回结果:在您的代码中放置 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-:运行它

    【讨论】:

    • 按照指示,我将“打印列表”更改为“列表”,但在我的机器上,当我在示例中调用表中的函数时,此更改没有产生任何输出。知道为什么会这样吗?
    • 我将在 M-: 中输出,但不在 M-x 中。这就是打印和返回之间的区别(如在 C、java 或其他编程语言中)。你试过 get-field-values 吗?
    • 您必须使用 M- 运行这些函数:您将在其中键入用括号括起来的名称。例如(获取字段值)
    • 当我尝试获取字段值时,什么也没发生。我想我可能夸大了我对 lisp/emacs 的了解程度。我在 org 文档中的 #+begin_src elisp ... #+end_src 块之间定义了上述函数。我转到定义的末尾并使用 C-c C-c 进行编译。然后我将光标移动到同一个 org 文件中的一个表,并使用我的(原始)函数键入 M-x print-field-value,然后输出消息缓冲区中的原始字符串。当您提到 M-: 时,我(也许是愚蠢地)假设这意味着在表格中使用 M-: 而不是 M-x。
    • 所以我只是使用了括号,你的函数运行良好,非常感谢你提供的我确信是一个新手提示。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-24
    相关资源
    最近更新 更多