Импортировать CSV в свойства MODE ORG
Вопрос
Я хотел бы импортировать CSV в режим ORG. Другие уже спрашивали о импорте таблиц CSV в ORG-MODE. Это не то, что я пытаюсь сделать. Мне нужно импортировать свойства CSV в ORG-MODE.
Например, CSV, как это:
Name,Tel,Mobile,Fax
John,11111,22222,33333
должен стать:
:PROPERTIES:
:Name: John
:Tel: 11111
:Mobile: 22222
:Fax: 33333
:END:
Вы служите, чтобы знать безболезненный способ сделать это?
Решение
Самый простой подход, который я могу видеть, это отметить строки данных в качестве области, а затем использовать поиск по регулированию REGEXP и заменить:
MX. replace-regexp
Рентген \(.*\),\(.*\),\(.*\),\(.*\)
Рентген :PROPERTIES:
CQ CJ. :Name: \1
CQ CJ. :Tel: \2
CQ CJ. :Mobile: \3
CQ CJ. :Fax: \4
CQ CJ. :END:
Рентген
Если вам нужно сделать это для многих переменных файлов CSV с разными заголовками и номерами столбцов, то я бы, вероятно, подошел к нему с Макрос клавиатуры.
Ответ USER310031 будет иметь хорошую основу для этого. Макрос может сузить буфер к каждой строке, вставьте строку заголовка над ним, выполнить csv-transpose
(который, кажется, требует Режим CSV) сделать поиск + заменить, добавить в :PROPERTIES:
а также :END:
Линии, расширяют буфер снова и оставьте точку на линии до следующая строка данных. Тогда просто отметьте оставшиеся строки данных в качестве области, а введите CX CK R..
Другие советы
Используйте CSV-режим, транспонирование рядов и столбцов CSV-транспонированием и форматом с заменой 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))))