Emacs有一个非常好的扩展名为org-mode。
我希望能够轻松地将CSV文件加载到组织模式而不会产生明显的悲痛。我所能找到的只是表格导入或表格捕获,简单地说,它甚至不能很好地工作。
请注意,我的部分问题是文字字符串,其中包含逗号。 1,2,3,4不同于1,2,3,4“。
是否有一个函数或一个可以运行的perl脚本将csv文件转换为org-mode格式?
谢谢!
答案 0 :(得分:66)
从组织模式手册:
C-c |将活动区域转换为 表。如果每行包含至少 一个TAB字符,功能 假设材料是标签 分离。如果每行包含一个 逗号,逗号分隔值(CSV) 假设。如果不是,则分割线 在空白区域。您可以使用 强制特定的前缀参数 separator:C-u强制CSV,C-u C-u 强制TAB和数字参数N. 表示至少N连续 空格,或者TAB将是 分隔符。如果没有活动 region,此命令创建一个空 组织表。
因此,只需将数据粘贴到组织文件中,选择它,然后执行C-u C-c |
。
答案 1 :(得分:5)
我假设您要将CSV专门转换为org-mode 表格。如果情况并非如此,您可能希望在问题中更明确地了解输出格式。
这样的事情应该这样做,或者至少为你提供一个你可以破解的起点:
#!/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"
答案 2 :(得分:3)
看看:
C-h 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)
答案 3 :(得分:2)
试试这个:
;; 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)
))
答案 4 :(得分:1)
这是一个黑客工作,但它确实有效。
导出CSV文件时,请在每个条目周围强制引号,然后将所有","
替换为竖线。
最后,我创建了一个像这样的宏:
C-a ; Beginning-of-line
| ; Self-insert-char
C-e ; end-of-line
| ; Self-insert-char
<down> ; Down one line
(我不是100%确定|是否是自我插入字符,所以最好记录自己的宏)
点击表格中间某处的标签,org-mode正确格式化。我发现在狭窄的地区更容易做到这一点。
警告:如果您的输入中有一个垂直条...它可能无法正常工作。像这样的情况应该很容易发现,并且相对容易修复。
通常,在将类似文本的内容导入org-mode时,我发现了一些智能宏写入的组合,而搜索替换是最简单的方法
我希望有所帮助。