Emacs:将CSV导入组织模式

Emacs通过org-mode的名字有一个很好的扩展。

我希望能够轻松地将CSV文件加载到组织模式,而不会导致严重的问题。 我所能find的只是表格导入或表格捕获,简而言之,它们几乎不能很好地工作。

请注意,我的问题的一部分是在其中的逗号文本string。 1,2,3,4不同于1,2,“3,4”。

有没有一个函数或perl脚本,可以运行将csv文件转换为组织模式格式?

谢谢!

从组织模式手册:

Cc | 将活动区域转换为表格。 如果每行至less包含一个TAB字符,则该函数假定材料是制表符分隔的。 如果每行都包含一个逗号,则假定逗号分隔值(CSV)。 如果不是这样的话,行被分割成空白字段。 您可以使用前缀参数来强制使用特定的分隔符:Cu强制CSV,Cu Cu强制使用TAB,而数字参数N表示至less连续N个空格,或者TAB将作为分隔符。 如果没有活动区域,则该命令创build一个空的组织表。

因此,只需将数据粘贴到组织文件中,select它,然后执行Cu Cc |

我假设你想要将CSV转换成组织模式表格 。 如果不是这样的话,你可能希望在你的问题中更加明确输出格式。

像这样的东西应该这样做,或者至less让你有一个起点,你可以破解:

  #!/usr/bin/perl use strict; use warnings; use Text::CSV; my $csv = Text::CSV->new(); while ( my $line = <DATA> ) { if ( $csv->parse( $line )) { my $str = join '|' , $csv->fields(); print "|$str|\n"; } } __DATA__ 1,2,3,4 1,2,"3,4" 

看一下:

Ch f org-table-convert-region

我总是转换CSV,所以我把它添加到我的.emacs。

 (defun org-convert-csv-table (beg end) (interactive (list (mark) (point))) (org-table-convert-region beg end ",") ) (add-hook 'org-mode-hook (lambda () (define-key org-mode-map (kbd "<f6>") 'org-convert-csv-table))) 

更新

这是另一个函数,也考虑引用的逗号:

  a,"12,12",b --> a | 12,12 |b 

随时提高:-)。

 (defun org-convert-csv-table (beg end) ; convert csv to org-table considering "12,12" (interactive (list (point) (mark))) (replace-regexp "\\(^\\)\\|\\(\".*?\"\\)\\|," (quote (replace-eval-replacement replace-quote (cond ((equal "^" (match-string 1)) "|") ((equal "," (match-string 0)) "|") ((match-string 2))) )) nil beg end) 

尝试这个:

 ;; Insert a file and convert it to an org table (defun aleblanc/insert-file-as-org-table (filename) "Insert a file into the current buffer at point, and convert it to an org table." (interactive (list (ido-read-file-name "csv file: "))) (let* ((start (point)) (end (+ start (nth 1 (insert-file-contents filename))))) (org-table-convert-region start end) )) 

这是一个黑客工作,但它的工作原理。

当您导出CSV文件时,强制引用每个条目,然后将所有","replace为垂直条。

最后,我做了一个这样的macros:

 Ca ; Beginning-of-line | ; Self-insert-char Ce ; end-of-line | ; Self-insert-char <down> ; Down one line 

(我不是100%确定|是否是自插入字符,所以最好logging自己的macros)

在表格中间的某个位置点击选项卡,组织模式将其正确格式化。 我觉得这在一个狭窄的地区更容易做到。

注意事项:如果你的input有一个垂直条,那么它可能不会正常工作。 像这样的情况应该很容易发现,而且相对容易修复。

一般来说,在将类似文本的内容导入组织模式时,我发现了一些智能macros写入的组合,而searchreplace是最简单的方法

我希望有帮助。