emacs - 将十进制值添加到数字列

时间:2012-08-14 17:58:58

标签: emacs macros

我正在处理一些具有以下结构的nastran输入文件:

GRID,1,,0.000,0.000,0.000,0
GRID,2,,0,000,1.653,0.000,0

我想要做的是为单个列添加特定值,例如,将1.653添加到第4列并获取:

GRID,1,,0.000,1.653,0.000,0
GRID,2,,0,000,3.306,0.000,0

我找到了一些示例,说明如何为integers执行此操作,但似乎无法使此功能适用于我上面概述的示例。

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

使用链接问题中的答案,可以像这样替换,例如:

C-米 - %

^\([^,]*,[^,]*,[^,]*,[^,]*,\)\([^,]*\)\(.*\)

返回

\,(concat \1 (number-to-string (+ 1.653 (string-to-number \2))) \3)

请注意,在您的示例中,第二行的列(逗号)多于第一行。可能是一个错字。

答案 1 :(得分:0)

分别作为命令

(defun raise-column ()
  (interactive "*")
  (save-excursion
    (save-restriction
      (widen)
      (goto-char (point-min))
      (while (re-search-forward "^\\([^,]*,[^,]*,[^,]*,[^,]*,\\)\\([^,]*\\)\\(.*\\)" nil t 1)
        (replace-match (concat (match-string-no-properties 1) (number-to-string (+ 1.653 (string-to-number (match-string-no-properties 2)))) (match-string-no-properties 3)))))))