2016-09-14 23 views
0

分隔符:我是emacs的新手。 我想做一個函數,通過組織表並提取特定的值,並對它們進行一些算術運算。算術與我的問題無關,但我無法將字段值轉換爲整數或浮點數列表。從emacs org-mode表中提取字段值

例如,當在桌子上

| 7 | 8 | 9 | 10 | 11 | -12 | 
| 78 | 46 | 00 | 36 | 64 | 98 | 

執行的功能

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

產生輸出

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

我對社區兩個問題:1。 什麼我列表中的這些元素是? (什麼類型的對象或那些) 2.有沒有一種方法可以將整數列入列表中,以便我可以輕鬆地對值執行一些算術操作?

我理想的是尋找一種簡單的方法來做到這一點,而不需要另外一個函數來修飾上面的函數返回並提取整數。我的直覺(也許有缺陷)是應該有一個更簡單的方法來做到這一點。我對麼?

回答

0

#(" 78 " 0 4 (fontified t face org-table))是一個字符串,在C中它只會被注意到" 78 "。接下來,您不需要打印以返回結果:在代碼中輸入list而不是print list就足夠了。

如果你想發現emacs中的任何模式,請使用它的所有函數具有相同前綴的事實。在這裏,運行describe-functionorg-table-並按TAB兩次以獲取在組織表上工作的所有功能的列表。然後您將看到有前景的功能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-:

+0

根據指示我改變了「列表」,但在我的機器上「列表」,這個改變沒有產生輸出,當我在我的例子中調用表中的函數。任何想法爲什麼這可能是? –

+0

我將在M-中輸出:但不在M-x中。這就是打印和返回之間的區別(如在C,Java或其他編程語言中)。你有沒有嘗試獲得場地價值? –

+0

您必須使用M-運行這些函數:您將在其中鍵入由圓括號包圍的名稱。例如(get-field-values) –