Импорт CSV в свойства режима Org - PullRequest
5 голосов
/ 06 апреля 2010

Я бы хотел импортировать CSV в Org-режим. Другие уже спрашивали об импорте CSV в таблицы режима Org. Это не то, что я пытаюсь сделать. Мне нужно импортировать CSV в свойства режима Org.

Например, CSV вроде этого:

Name,Tel,Mobile,Fax
John,11111,22222,33333

должно стать:

:PROPERTIES:
:Name: John
:Tel: 11111
:Mobile: 22222
:Fax: 33333
:END:

Вы случайно не знаете, как это сделать?

Ответы [ 3 ]

4 голосов
/ 17 января 2011

Самый простой подход, который я вижу, - пометить строки данных как регион, а затем использовать поиск и замену регулярного выражения:

Mx replace-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-файлов с разными заголовками и количеством столбцов, то я, вероятно, подхожу к этому с клавиатурными макросами .

Ответ user310031 послужит хорошей основой для этого. Макрос может сузить буфер до каждой строки, вставить строку заголовка над ней, выполнить csv-transpose (что, по-видимому, требует CSV mode ), выполнить поиск + замену, добавить в :PROPERTIES: и :END: строк, снова расширяем буфер и оставляем точку на строке перед следующей строкой данных. Затем просто отметьте оставшиеся строки данных как регион и введите C-x C-k r .

2 голосов
/ 06 апреля 2010

используйте csv-mode, транспонируйте строки и столбцы с помощью csv-transpose и форматируйте с помощью replace-regexp:

search \ (. * \), \ (. * \)

заменить на: : \ 1: \ 2

0 голосов
/ 02 декабря 2014

Вы можете сделать что-то вроде этого.Ваш пример не слишком понятен.Если есть более одной строки, он будет просто устанавливать свойства в одном и том же заголовке снова и снова.Вы можете использовать Имя для создания нового заголовка, а затем установить свойства для заголовка.код ниже работает для довольно хорошо отформатированных 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))))
...