我想將CSV導入組織模式。其他人已經詢問如何將CSV導入組織表模式。這不是我想要做的。我需要將CSV導入組織模式屬性。將CSV導入組織模式屬性
例如,CSV這樣的:
Name,Tel,Mobile,Fax
John,11111,22222,33333
應該變成:
:PROPERTIES:
:Name: John
:Tel: 11111
:Mobile: 22222
:Fax: 33333
:END:
你碰巧知道無痛的方式做到這一點?
我想將CSV導入組織模式。其他人已經詢問如何將CSV導入組織表模式。這不是我想要做的。我需要將CSV導入組織模式屬性。將CSV導入組織模式屬性
例如,CSV這樣的:
Name,Tel,Mobile,Fax
John,11111,22222,33333
應該變成:
:PROPERTIES:
:Name: John
:Tel: 11111
:Mobile: 22222
:Fax: 33333
:END:
你碰巧知道無痛的方式做到這一點?
我可以看到的最簡單的方法是標記數據行作爲區域,然後使用一個正則表達式的搜索和替換:
的Mxreplace-regexp
RET\(.*\),\(.*\),\(.*\),\(.*\)
RET:PROPERTIES:
CQ CJ:Name: \1
CQ CJ:Tel: \2
CQ CJ:Mobile: \3
CQ CJ:Fax: \4
CQ CJ:END:
RET
如果你需要做的這對於許多可變的CSV文件具有不同的標題和列數,那麼我可能會用keyboard macros來處理它。
user310031的回答將爲此奠定良好的基礎。宏可以將緩衝區縮小到每一行,在其上面插入標題行,執行csv-transpose
(這看起來需要CSV mode)執行搜索+替換,在:PROPERTIES:
和:END:
行中添加,再次擴大緩衝區,然後離開點行之前下一個數據行。然後,將剩餘的數據行標記爲區域,並鍵入C-x C-k r。
使用CSV模式,轉置行和列由CSV-轉置和格式以replace-regexp的:(。* \)(。* \)
搜索\,\
替換爲::\ 1:\ 2
你可以做這樣的事情。你的例子不太清楚。如果有多行,它只會反覆在同一個頭文件中設置屬性。您可能需要使用名稱來創建新標題,然後在標題上設置屬性。下面的代碼適用於格式良好的csv文件。
(let ((lines (with-temp-buffer
(insert-file-contents "data.csv")
(split-string (buffer-string) "\n")))
(properties)
(values))
(setq properties (split-string (car lines) ","))
(loop for line in (cdr lines)
do
(setq values (split-string line ","))
(loop for property in properties
for value in values
do
(org-entry-put (point) property value))))
你爲什麼要把這些值變成標籤? – Mica 2010-04-06 16:12:05
屬性值與標籤不同。 – lecodesportif 2010-04-06 21:58:38