Nick Dokos <ndo...@gmail.com> writes: > franc...@avalenn.eu writes: > >> This code does not work because of automatic conversion from string to >> number in org-babel-read-table. >> >> #+TBLNAME: table_test >> | name | id | >> |-------+-----| >> | name1 | 034 | >> | name2 | 135 | >> | name3 | 1B5 | >> >> #+NAME: code_test >> #+BEGIN_SRC emacs-lisp :var table=table_test >> (setq myv "") >> (dolist (line table myv) >> (unless (eq line 'hline) >> (setq myv (concat myv ";" (mapconcat 'identity line ","))))) >> myv >> >> #+END_SRC >> >> I would like to have this result : >> >> #+RESULTS: code_test >> : ;name,id;name1,034;name2,135;name3,1B5 >> >> Is there any possibility to deactivate this conversion as with >> inhibit-lisp-eval for lisp forms ? Or better is there any way to chose >> conversion parameters on a column to column basis ? >> > > Not that I know of. But you can redefine org-babel-read-table to omit > the conversion: > > --8<---------------cut here---------------start------------->8--- > (defun org-babel-read-table () > (org-table-to-lisp)) > --8<---------------cut here---------------end--------------->8--- > > and redefine it back afterwards: > > --8<---------------cut here---------------start------------->8--- > (defun org-babel-read-table () > "Read the table at `point' into emacs-lisp." > (mapcar (lambda (row) > (if (and (symbolp row) (equal row 'hline)) row > (mapcar (lambda (el) (org-babel-read el 'inhibit-lisp-eval)) > row))) > (org-table-to-lisp))) > --8<---------------cut here---------------end--------------->8--- > > Disgusting, no?
Disgusting and fantastic. How about taking it one step further...
This code block defines the == form used to read table references without conversion. Eval this first. #+begin_src emacs-lisp :results silent (defmacro with-simple-tables (ref) `(flet ((org-babel-read-table () (org-table-to-lisp))) (org-babel-ref-resolve ,(symbol-name ref)))) #+end_src * Original Example #+TBLNAME: table_test | name | id | |-------+-----| | name1 | 034 | | name2 | 135 | | name3 | 1B5 | #+NAME: code_test_orig #+BEGIN_SRC emacs-lisp :var table=table_test (format "%S" table) #+END_SRC #+RESULTS: code_test_orig : (("name" "id") hline ("name1" 34) ("name2" 135) ("name3" "1B5")) and now without conversion #+NAME: code_test_simplified #+BEGIN_SRC emacs-lisp :var table=(with-simple-tables table_test) (format "%S" table) #+END_SRC #+RESULTS: code_test_simplified : (("name" "id") hline ("name1" "034") ("name2" "135") ("name3" "1B5"))
-- Eric Schulte https://cs.unm.edu/~eschulte PGP: 0x614CA05D