Emacs: импортировать CSV в org-режим - PullRequest
41 голосов
/ 07 августа 2009

Emacs имеет очень красивое расширение по имени org-mode.

Я хотел бы иметь возможность легко загружать файлы CSV в режиме org без значительного горя. Все, что мне удалось найти, это импорт таблиц или захват таблиц, которые, проще говоря, не работают даже приблизительно хорошо.

Обратите внимание, что часть моей проблемы - текстовые строки с запятой внутри них. 1,2,3,4 отличается от 1,2, «3,4».

Существует ли какая-либо функция или сценарий perl, который можно запустить для преобразования файла csv в формат режима org?

Спасибо!

Ответы [ 5 ]

66 голосов
/ 07 августа 2009

Из руководства по режиму org:

С-с | Преобразовать активную область в Таблица. Если каждая строка содержит хотя бы один символ табуляции, функция предполагает, что материал является вкладкой разделены. Если каждая строка содержит запятая, значения через запятую (CSV) предполагаются. Если нет, строки разделяются на пробел в поля. Ты можешь использовать префиксный аргумент, чтобы вызвать конкретный Разделитель: C-U силы CSV, C-U C-U заставляет TAB и числовой аргумент N указывает, что по крайней мере N подряд пробелы, или, альтернативно, табуляция будет разделитель. Если нет активных регион, эта команда создает пустой Орг. Стол.

Так что просто вставьте данные в org-файл, выберите его и выполните C-u C-c |.

5 голосов
/ 07 августа 2009

Я предполагаю, что вы хотите конвертировать ваш 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"
4 голосов
/ 02 сентября 2015

Посмотрите на:

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)
2 голосов
/ 11 сентября 2009

Попробуйте это:

;; 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 голос
/ 11 сентября 2009

Это немного хакерская работа, но она работает.

при экспорте файла CSV ставьте кавычки вокруг каждой записи, а затем заменяйте все "," вертикальной чертой.

Наконец, я делаю макрос, который делает что-то вроде этого:

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

(я не уверен на 100%, является ли | самозаряжаемым символом или нет, поэтому лучше всего записать свой собственный макрос)

Нажмите вкладку где-то посередине таблицы, и режим org-формата правильно ее отформатирует. Я считаю, что это легче сделать в суженном регионе.

Предостережение: если у вас есть вертикальная черта на входе ... это, вероятно, не будет работать правильно. Подобные ситуации должны быть легко обнаружимы и относительно легко исправить.

Как правило, при импорте чего-то типа текста в режим org я обнаружил, что комбинация некоторых интеллектуальных макросов и поиска-замены является наиболее простым способом

Надеюсь, это поможет.

...