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是最简单的方法
我希望有帮助。