1

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

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

第一个没有。代表编号。下一节中的 csv 值,依此类推

例如

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 会话中继续使用的函数。是否可以这样保存宏?

感激地收到任何想法

4

2 回答 2

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. 插入新行
于 2012-04-26T16:11:39.470 回答
0

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

尽管它可能不完全符合您的要求,但它具有格式化功能以提高可读性,以及以各种方式处理 csv 文件的其他功能。

于 2012-04-27T21:12:11.663 回答