emacs宏将矢量转换为.csv表示法中的矩阵

时间:2012-04-26 15:06:28

标签: emacs

我有一个csv值的单行文本文件

我希望能够“漂亮地打印”文件以跨越多行以使其更具可读性

第1号代表没有。 csv值在下一节等等

e.g。

3,1,2,3,3,4,5,6

将转换为:

3,1,2,3
3,4,5,6

我对制作宏有点了解,例如

C-x (
C-s RET ,
C-x )

使用这个我可以做到:

C-u 3 C-x e沿

移动3个csv值

我的关键点是如何使用文件中的值粘贴到arg C-u

也许我应该使用e-lisp函数作为我想要“保存”以便在emacs会话中持续使用的函数。是否可以保存宏?

感谢任何想法

2 个答案:

答案 0 :(得分:4)

我发现elisp比键盘宏更容易思考。怎么样:

(defun csv-line-breaks ()
  (interactive)
  (while (search-forward "," nil t 
                         (1+ (string-to-number (thing-at-point 'word))))
    (delete-char -1)
    (insert "\n")))

(global-set-key (kbd "C-c b") 'csv-line-breaks)

在你的.emacs中(或只是评估暂存缓冲区中的代码),你将点放在行的开头,然后点击C-c b将行分成你的块想。

这是做什么的:

  1. 循环缓冲区,直到它用完了值,并且对于每个循环:
  2. 读取第一个值。 (thing-at-point 'word)抓住在标点符号空格(或多或少)之间找到的任何内容。
  3. 将值(实际上是字符串)转换为数字
  4. 在该号码上添加一个号码,然后向前移动许多逗号
  5. 删除上一个逗号
  6. 插入新行

答案 1 :(得分:0)

您可能需要查看Emacs的csv-mode:http://emacswiki.org/emacs/CsvMode

虽然它可能无法完全满足您的需求,但它具有格式化可读性的功能,以及用于以各种方式复制csv文件的其他功能。