首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在elisp中操纵数列

在elisp中操纵数列
EN

Stack Overflow用户
提问于 2010-04-22 02:45:54
回答 1查看 145关注 0票数 1

我的文本文件中有这样的表格:

代码语言:javascript
复制
   Investment advisory and                                                    
   related fees receivable           (161,570 )      (71,739 )      (73,135 )
   Net purchases of trading                                                   
   investments                        (93,261 )      (30,701 )      (11,018 )
   Other receivables                   61,216        (10,352 )      (69,313 ) 
   Restricted cash                     20,658        (20,658 )            -   
   Other current assets               (39,643 )       14,752             64   
   Other non-current assets            71,896        (26,639 )      (26,330 ) 

由于这些是会计数字,括号内的数字表示负数。破折号表示0或没有数字。

我希望能够标记一个矩形区域,如上面的第三列,调用一个函数(format-thousands-column),并自动让-73.135-11.018-69.313+0.064-26.330坐在我的捕杀环中。

这就是我想出来的:

代码语言:javascript
复制
(defun div_by_1000 (astr)
  (number-to-string
   (/ (string-to-number astr) 1000.0))
  )

(defun format-column-base (format-hook)
  "format accounting numbers in a rectangular column. format-column puts the result
   in the kill-ring"
  (copy-rectangle-to-register 0 (min (mark) (point)) (max (mark) (point)) nil)
  (with-temp-buffer
(insert-register 0)
(replace-regexp "[^0-9.+( \n]" "" nil (point-min) (point-max))
(goto-char (point-min))
(while (search-forward "(" nil t)   
  (replace-match "-" nil t)
  (just-one-space)
  (delete-backward-char 1)
  )
(kill-new 
 (replace-regexp-in-string 
  "+-" "-" (mapconcat format-hook
              (split-string (buffer-substring (point-min) (point-max))) "+")))))

(defun format-column ()
  (interactive)
  (format-column-base 'identity)
)

(defun format-thousands-column ()
  (interactive)
  (format-column-base 'div_by_1000)
)

(global-set-key "\C-c\C-f" 'format-thousands-column)
(global-set-key "\C-c\C-g" 'format-column)

虽然它看起来很有效,但我怀疑这个函数的编码很差。

您认为是否有更好的方法来编写format-column-base,或者不这样做,您能就如何改进这段代码提出建议吗?

编辑:,我已经做了一些改进;它现在可以对数字进行简单的处理,例如将每个数字除以1000。每个数字的处理也可以通过格式钩子进行定制。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-04-22 03:26:26

我想看看org-模式的表特性,他们可能做了很多你想做的事情。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2687939

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档