Відповіді:
Можна використовувати безліч рішень. Я припускаю, що ви хочете створити нову таблицю на основі існуючої. Це включає функціональну функцію, коли ви визначаєте кодові блоки, які створюють нову таблицю. Блоки коду можуть бути багатьма мовами, і ви навіть можете визначити такий код коду, який згодом зазвичай використовується у формулах таблиць.
Я показую тут лише приклад, використовуючи emacs lisp. Ви можете знайти ще багато прикладів у моїй прикладній колекції на github: https://github.com/dfeich/org-babel-examples
*table filter
#+NAME: table1
| col1 | col2 | col3 | col4 | col5 |
|-------+------+------+------+------|
| row0 | 0 | CH | CH | 0 |
| row1 | 2 | D | CN | 5 |
| row2 | 4 | USA | PL | 10 |
| row3 | 6 | CN | D | 15 |
| row4 | 8 | JP | USA | 20 |
| row5 | 10 | PL | PL | 25 |
| row6 | 12 | USA | JP | 30 |
| row7 | 14 | D | CN | 35 |
| row8 | 16 | PL | USA | 40 |
| row9 | 18 | CN | D | 45 |
| row10 | 20 | CH | CH | 50 |
Тепер ми визначимо функцію фільтра, яка створює нову таблицю з необхідними значеннями.
# + NAME: мій фільтр # + BEGIN_SRC elisp: var tbl = table1 val = "США": назви y (cl-петля для рядка в tbl if (рівний (nth 3 ряд) val) збирати рядок у newtbl нарешті повернути newtbl) # + END_SRC # + РЕЗУЛЬТАТИ: мій-фільтр | col1 | col2 | col3 | col4 | col5 | | ------ + ------ + ------ + ------ + ------ | | ряд4 | 8 | JP | США | 20 | | ряд8 | 16 | PL | США | 40 |
Я також можу використовувати цю функцію в синтаксисі CALL в режимі org
# + CALL: мій-фільтр (tbl = table1, val = "CN"): імена y # + РЕЗУЛЬТАТИ: | col1 | col2 | col3 | col4 | col5 | | ------ + ------ + ------ + ------ + ------ | | рядок1 | 2 | Д | CN | 5 | | ряд7 | 14 | Д | CN | 35 |
Я також демонструю тут підхід SQLite, коли я використовую вашу первісну вимогу фільтрувати всі рядки, які містять рядок, або в стовпцях 3 або 4. Невеликим недоліком підходу sqlite є те, що у нас є якийсь код коробки, який слід прочитати в таблиці та створити SQLite БД.
# + NAME: my-filter2 # + BEGIN_SRC sqlite: db table1.sqlite: var tbl = table1 val = "USA": назви так падаюча таблиця, якщо існує table1; створити таблицю таблиці1 (col1 VARCHAR, col2 INTEGER, col3 VARCHAR, col4 VARCHAR, col5 INTEGER); .імпортувати таблицю "$ tbl "1 виберіть * з таблиці1, де col3 = '$ val' або col4 = '$ val'; # + END_SRC # + РЕЗУЛЬТАТИ: | col1 | col2 | col3 | col4 | col5 | | ------ + ------ + ------ + ------ + ------ | | рядок2 | 4 | США | PL | 10 | | ряд4 | 8 | JP | США | 20 | | ряд6 | 12 | США | JP | 30 | | ряд8 | 16 | PL | США | 40 | # + CALL: my-filter2 (tbl = table1, val = "CN"): імена y # + РЕЗУЛЬТАТИ: | col1 | col2 | col3 | col4 | col5 | | ------ + ------ + ------ + ------ + ------ | | рядок1 | 2 | Д | CN | 5 | | ряд3 | 6 | CN | Д | 15 | | ряд7 | 14 | Д | CN | 35 | | ряд9 | 18 | CN | Д | 45 |
Сподіваємось, що я правильно зрозумів ваше запитання і що посилання допоможуть вам знайти інші варіанти рішення.
symbol-name
функцію, щоб досягти успіху в рішенні Emacs Lisp. Тільки для згадки.
Я використовую q - Текст як дані та 2 функції в моєму library-of-babel
( Conf-Example ), щоб забезпечити простий інтерфейс sql для запиту / приєднання org-inline таблиць та зовнішніх .*sv
файлів.
Під кришкою q
(через python ) також використовується sqlite , як і другий підхід від @dfeich, але знімається потреба у галасливому кодовому коді-коду, характерному для кожної окремої таблиці джерел. Його просто потрібно встановити один раз через менеджер системних пакетів, як правило, в python-q-text-as-data
.
Після завантаження вашої бібліотеки вавилонів з 2-х функцій, наведених #+Call:
нижче, у вашому org-файлі вам знадобиться лише подібне нижче, щоб використовувати SQL-запити.
#+CALL: Q[:stdin table1](where="col4=='USA'")
#+RESULTS:
| col1 | col2 | col3 | col4 | col5 |
|------+------+------+------+------|
| row4 | 8 | JP | USA | 20 |
| row8 | 16 | PL | USA | 40 |
Це будує командний рядок, як SELECT $select FROM $from WHERE $where
, за замовчуванням для параметрів для вибору всіх стовпців stdin
для виведення.
Блоки коду, які потрібно додати до вашої бібліотеки:
** Add a header Row to tables
#+name: addhdr
#+begin_src emacs-lisp :var tbl=""
(cons (car tbl) (cons 'hline (cdr tbl)))
#+end_src
** Filtering with SQL
#+NAME: Q
#+HEADER: :results value table
#+HEADER: :var callOptsStd="-H -O -t" callOpts=""
#+HEADER: :post addhdr(*this*)
#+BEGIN_SRC shell :stdin Ethers :var select="*" from="-" where="1"
q $callOptsStd $callOpts "Select $select from $from where $where"
#+END_SRC