Thorsten Jolitz <tjol...@gmail.com> writes: > Daniel Hornung <daniel.horn...@ds.mpg.de> writes: > >> On Monday, August 05, 2013 11:16:55 Thorsten Jolitz wrote: >>> Daniel Hornung <daniel.horn...@ds.mpg.de> writes: >>> > I think one great way to increase the usefulness of org-mode would be a >>> > function which turns a table into a csv or tsv block of text again. >>> > >>> > I assume that the functionality exists already in org-table-export, I >>> > would just wish for this to be exposed as a function which converts the >>> > table in place instead of writing it into a new file (org-table-export >>> > does not allow overwriting the current file). >>> > >>> > This would finally give a comfortable way to edit tsv or csv tables >>> > without hassles in emacs. >>> >>> Would you need something more sophisticated than this? >>> >>> #+TBLNAME: tbl >>> >>> | header 1 | header 2 | header 3 | >>> | >>> |----------+----------+----------| >>> | >>> | label1 | 3 | 99 | >>> | label2 | 2 | 66 | >>> | label3 | 7 | 231 | >>> >>> #+TBLFM: $3=$2*33 >>> >>> #+HEADER: :var table=tbl :hlines no >>> #+HEADER: :results list verbatim >>> #+begin_src emacs-lisp >>> (defun tbl2csv (table-as-lisp) >>> (mapconcat >>> (lambda (row) >>> (mapconcat >>> (lambda (cell) >>> (format "%s" cell)) >>> row ",")) >>> table-as-lisp ",")) >>> >>> (tbl2csv table) >>> #+end_src >>> >>> #+results: >>> : "header 1,header 2,header 3,label1,3,99,label2,2,66,label3,7,231" >>> >>> -- >>> cheers, >>> Thorsten >> >> The idea looks OK, although I did not get it to run with C-x C-e (copied the >> content into a new buffer, entered org-mode and executed the elisp >> code). > > Mmh...it works here ... the table looks a bit distorted in your post ... > >> For more specific handling of e.g. strings, the code used in >> http://orgmode.org/w/?p=org-mode.git;a=blob;f=lisp/org-table.el;hb=HEAD#l601 >> looks more like it could be used already, though. Plus, it allows to >> specify the column and row separators (e.g. "\t" and "\n"). > > In tbl2csv, one could replace the two hardcoded "," with function args > 'col-separator' and 'row-separator'. > > Or use something like this: > > #+begin_src emacs-lisp > (defun tj/insert-exported-table (&optional insertion-point file) > (let ((tmp-file (or file (make-temp-file "foo"))) > (insert-point (or insertion-point (1+ (org-table-end))))) > (org-table-export tmp-file "orgtbl-to-csv") > (goto-char insert-point) > (insert-file-contents tmp-file))) > #+end_src > > #+results: > : tj/insert-exported-table > > then do 'M-: (tj/insert-exported-table)' on this table: > > | header 1 | header 2 | header 3 | > |----------+----------+----------| > | label1 | 3 | 99 | > | label2 | 2 | 66 | > | label3 | 7 | 231 | > > header 1,header 2,header 3 > label1,3,99 > label2,2,66 > label3,7,231
There are orgtbl-to-tsv and orgtbl-to-csv (and orgtbl-to-generic which the first two call) functions in org: it should be possible to use them and avoid reinventing wheels. -- Nick