Subject: Converting csv (with new lines) to org-mode.
Date: Thursday 31st January 2013 12:25:45 UTC (over 5 years ago)
Hello everyone, A csv table can include newlines in its fields, which confuses the csv parser contained in org-table-convert-region. Since I had no time to patch the current implementation of org-table-convert-region, I decided to use an already existing csv parser found in marmalade. You find below the code I used (requires pcsv, a csv parser) if anyone is interested. It's very simple : pcsv does the work of transforming the csv into a list of list, then I mapconcat those using " | " as separator. (defun yf/lisp-table-to-org-table (table &optional function) "Convert a lisp table to `org-mode' syntax, applying FUNCTION to each of its elements. The elements should not have any more newlines in them after applying FUNCTION ; the default converts them to spaces. Return value is a string containg the unaligned `org-mode' table." (unless (functionp function) (setq function (lambda (x) (replace-regexp-in-string "\n" " " x)))) (mapconcat (lambda (x) ; x is a line. (concat "| " (mapconcat function x " | ") " |")) table "\n")) (defun yf/csv-to-table (beg end) "Convert a csv file to an `org-mode' table." (interactive "r") (require 'pcsv) (insert (yf/lisp-table-to-org-table (pcsv-parse-region beg end))) (delete-region beg end) (org-table-align)) -- N.