Don*_*ick 70
从组织模式手册:
抄送| 将活动区域转换为表格.如果每行包含至少一个TAB字符,则该函数假定材料是制表符分隔的.如果每行包含逗号,则假定使用逗号分隔值(CSV).如果不是,则将行在空白处拆分为字段.您可以使用前缀参数强制使用特定分隔符:Cu强制CSV,Cu Cu强制TAB和数字参数N表示至少N个连续空格,或者TAB将是分隔符.如果没有活动区域,则此命令将创建一个空的Org表.
因此,只需将数据粘贴到组织文件中,然后选择它即可C-u C-c |
.
我假设您要将CSV专门转换为组织模式表.如果情况并非如此,您可能希望在问题中更明确地了解输出格式.
这样的事情应该这样做,或者至少为你提供一个你可以破解的起点:
#!/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"
Run Code Online (Sandbox Code Playgroud)
看一下:
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)))
Run Code Online (Sandbox Code Playgroud)
更新
这是另一个考虑引用逗号的函数:
a,"12,12",b --> a | 12,12 |b
Run Code Online (Sandbox Code Playgroud)
随时改进它:-)。
(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)
Run Code Online (Sandbox Code Playgroud)