2009-08-06 76 views
37

Emacs通過組織模式的名稱有一個很好的擴展。Emacs:將CSV導入組織模式

我希望能夠輕鬆地將CSV文件加載到組織模式中,而不會導致嚴重的問題。我所能找到的只是表格導入或表格捕獲,簡而言之,它們幾乎不能很好地工作。

請注意,我的問題的一部分是其中包含逗號的文本字符串。 1,2,3,4不同於1,2,「3,4」。

是否有一個函數或perl腳本,可以運行將csv文件轉換爲組織模式格式?

謝謝!

+0

看看http://code.google.com/p/csvfix/作者是Neil Butterworth。它具有CSV-> XML轉換功能,因此您可以將其用作解決方案的一部分。 – 2009-08-06 22:13:41

+0

只有部分相關,但仍然值得讀者不知道邊緣病例CSV數量的人:https://tburette.github.io/blog/2014/05/25/so-you-want-寫上你自己的CSV代碼/ – sampablokuper 2016-02-08 20:14:05

回答

5

我假設你想要將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" 
53

從組織種手動模式:

C-C |將活動區域轉換爲 表格。如果每行至少包含 一個TAB字符,則函數 假定材料是分隔標籤 。如果每行都包含逗號 ,則假定使用逗號分隔值(CSV) 。如果不是,行將空格分割爲 到字段中。您可以使用 前綴參數來強制特定 分離器:C-U勢力CSV,C-U C-ü 力量TAB,和數值參數n 表明至少有N個連續 空間,或者一個TAB將 的分隔符。如果沒有活動的 區域,則此命令會創建一個空的 組織表。

因此,只需將數據粘貼到組織文件中,選擇它,然後執行C-u C-c |

+0

嗯,看起來像PDF中的「fi」連字從上面的報價中退出......反正......「字段」應該是「fields」,「specic 「應該是」特定的「,並且」前綴「應該是」前綴「。 – 2009-08-07 22:16:11

+1

當您具有包含逗號的CSV字段時,該操作無效,該操作由OP指定... – genehack 2009-08-08 00:49:42

+0

C-u C-c |用逗號文件爲我工作。 – tenpn 2012-11-21 11:21:41

1

試試這個:

;; 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) 
    )) 
1

這是一個黑客位在職的,但它的作品。

當您導出CSV文件時,強制引用每個條目,然後將所有","替換爲垂直條。

最後,我做一個宏,確實是這樣的:

C-a ; Beginning-of-line 
|  ; Self-insert-char 
C-e ; end-of-line 
|  ; Self-insert-char 
<down> ; Down one line 

(我不是100%肯定,如果|是自嵌入char或沒有,所以最好在錄製自己的宏)

Hit tab位於表格中間的某個位置,組織格式正確地格式化它。我覺得在狹窄的地區這很容易做到。

警告:如果你的輸入有一個垂直條,它可能不會正常工作。像這樣的情況應該很容易發現,並且相對容易修復。

一般來說,進口的東西時,文本等向組織模式,我已經發現了一些聰明的宏觀寫作的結合,搜索替換是我希望幫助最簡單的方法

2

看一看:

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)