Emacs通過組織模式的名稱有一個很好的擴展。Emacs:將CSV導入組織模式
我希望能夠輕鬆地將CSV文件加載到組織模式中,而不會導致嚴重的問題。我所能找到的只是表格導入或表格捕獲,簡而言之,它們幾乎不能很好地工作。
請注意,我的問題的一部分是其中包含逗號的文本字符串。 1,2,3,4不同於1,2,「3,4」。
是否有一個函數或perl腳本,可以運行將csv文件轉換爲組織模式格式?
謝謝!
Emacs通過組織模式的名稱有一個很好的擴展。Emacs:將CSV導入組織模式
我希望能夠輕鬆地將CSV文件加載到組織模式中,而不會導致嚴重的問題。我所能找到的只是表格導入或表格捕獲,簡而言之,它們幾乎不能很好地工作。
請注意,我的問題的一部分是其中包含逗號的文本字符串。 1,2,3,4不同於1,2,「3,4」。
是否有一個函數或perl腳本,可以運行將csv文件轉換爲組織模式格式?
謝謝!
我假設你想要將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"
從組織種手動模式:
C-C |將活動區域轉換爲 表格。如果每行至少包含 一個TAB字符,則函數 假定材料是分隔標籤 。如果每行都包含逗號 ,則假定使用逗號分隔值(CSV) 。如果不是,行將空格分割爲 到字段中。您可以使用 前綴參數來強制特定 分離器:C-U勢力CSV,C-U C-ü 力量TAB,和數值參數n 表明至少有N個連續 空間,或者一個TAB將 的分隔符。如果沒有活動的 區域,則此命令會創建一個空的 組織表。
因此,只需將數據粘貼到組織文件中,選擇它,然後執行C-u C-c |
。
試試這個:
;; 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文件時,強制引用每個條目,然後將所有","
替換爲垂直條。
最後,我做一個宏,確實是這樣的:
C-a ; Beginning-of-line
| ; Self-insert-char
C-e ; end-of-line
| ; Self-insert-char
<down> ; Down one line
(我不是100%肯定,如果|是自嵌入char或沒有,所以最好在錄製自己的宏)
Hit tab位於表格中間的某個位置,組織格式正確地格式化它。我覺得在狹窄的地區這很容易做到。
警告:如果你的輸入有一個垂直條,它可能不會正常工作。像這樣的情況應該很容易發現,並且相對容易修復。
一般來說,進口的東西時,文本等向組織模式,我已經發現了一些聰明的宏觀寫作的結合,搜索替換是我希望幫助最簡單的方法
。
看一看:
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)
看看http://code.google.com/p/csvfix/作者是Neil Butterworth。它具有CSV-> XML轉換功能,因此您可以將其用作解決方案的一部分。 – 2009-08-06 22:13:41
只有部分相關,但仍然值得讀者不知道邊緣病例CSV數量的人:https://tburette.github.io/blog/2014/05/25/so-you-want-寫上你自己的CSV代碼/ – sampablokuper 2016-02-08 20:14:05