Добавить / удалить функции электронной таблицы столбцов в Emacs? - PullRequest
0 голосов
/ 08 июня 2011

С учетом данных с разделителями в следующем формате, как я могу вставить и удалить столбцы?

abc|efg|123|xyz123abc|yes
xxx|bbb|cc|ddd|no

Скажем, например, что я хотел добавить 3-й столбец со значением по умолчанию 1 и удалить 4-й столбец, чтобы данные выглядели так:

abc|efg|1|123|yes
xxx|bbb|1|cc|no

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

| abc | efg | 123 | xyz123abc |
| xxx | bbb | cc  | ddd       |
|     |     |     |           |

Ответы [ 3 ]

2 голосов
/ 08 июня 2011

Помимо возможностей таблиц в режиме org, в Emacs есть и другие функции редактирования таблиц, которые помогут вам в этом.

abc|efg|123|xyz123abc|yes
xxx|bbb|cc|ddd|no

Выбор региона, за которым следует
Mx table-capture RET | RET $ RET RET 1 RET

дает нам:

+---+---+---+---------+---+
|abc|efg|123|xyz123abc|yes|
+---+---+---+---------+---+
|xxx|bbb|cc |ddd      |no |
+---+---+---+---------+---+

Теперь переместите точку внутри ячейки столбца, который вы хотите удалить, и используйте
Mx table-delete-column RET

+---+---+---+---+
|abc|efg|123|yes|
+---+---+---+---+
|xxx|bbb|cc |no |
+---+---+---+---+

«Нераспознавание» таблицы отключит режим редактирования таблицы, так что вы можете спокойно связываться с форматированием.

Mx table-unrecognize-table RET

Тогда нужно просто найти и заменить, чтобы вернуться к исходному формату.

Вы можете удалить все разделители строк, убивпервый ряд с Ck Ck , а остаток с M -% Cy RET RET! )

|abc|efg|123|yes|
|xxx|bbb|cc |no |

Тогда вам просто нужноочистить префикс строки и суффикс, а также заполнение внутри ячеек:

MC -% +| RET | RET ! (nb есть пробел перед +)
MC -% ^|\||$ RET RET !

abc|efg|123|yes
xxx|bbb|cc|no

Вы можете записать этапы очистки как макрос клавиатуры (или написать функцию), чтобы выполнить их за один шаг.

2 голосов
/ 08 июня 2011

Ну, я только что узнал, как импортировать данные в SES (нет функций "ses-import", но оказывается, что вы можете просто восстановить данные, разделенные табуляцией), поэтому этот ответ даже проще, чем использование захвата таблиц:) (если ваши данные не содержат вкладок, в этом случае вам нужно будет обойти это).

SES - это приложение для работы с электронными таблицами в Emacs.Подробности см. В его информационном узле:
Ch i d m ses RET или M -: (info "ses") RET

Для обработки данных:

  1. Преобразование исходных данных в TSV с помощью, скажем, M -% | RET TAB RET !
  2. Killэтот текст (например, выберите регион, затем Cw )
  3. Создайте временный буфер и перейдите в режим ses: Cx b *ses* RET
    Mx ses-mode RET
    (и, конечно, Ch m дляописание режима ses и его сочетаний клавиш)
  4. Выгрузить данные в электронную таблицу: Cy
  5. Переместить точку в столбец для удаления и убить его с помощью Mk
  6. Скопируйте результат обратно в список уничтожений в формате TSV: Cx h x t
    (то есть mark-whole-buffer + ses-export-tsv)
  7. Убить буфер * ses * с помощью Cx k RET
  8. Вернуть измененные данные TSV обратно в исходный буфер с помощью Cy
  9. Преобразоватьвкладки возвращаются к | с с помощью M -% TAB RET | RET !

Предостережение: На самом деле у меня возникают проблемы с рывками в SES при моей стандартной конфигурации, но этот процесс работает нормально при emacs -q.YMMV.

0 голосов
/ 08 июня 2011

Я могу придумать два способа обновить его вручную (хотя это может быть не то, что вам нужно):

Добавление или удаление символов с помощью прямоугольников:

cua-mode
<C-return> ;; cua-set-rectangle-mark on first row
;; create a rectangle one character wide from first to last rows
;; type '1|' to create your new column.

Запишите макрос для добавления / удаления записи столбца и повторите для всего файла.

...