emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: "Loris Bennett" <loris.bennett@fu-berlin.de>
To: emacs-orgmode@gnu.org
Subject: Re: Import CSV file, remove columns, print table
Date: Tue, 17 Sep 2019 12:02:23 +0200	[thread overview]
Message-ID: <877e671brk.fsf@hornfels.zedat.fu-berlin.de> (raw)
In-Reply-To: CAJ51ETohh8DtT8zeNWaOtU1oaFRe=ZRVM96XX6y5PMAgz6hTSw@mail.gmail.com

Hi John,

Thanks, that's great.  

To get horizontal lines between each participant so that there is a nice
box for the signatures I tried

  return tabulate.tabulate(sorted_results, tablefmt='grid')

This works, but then the 

  #+ATTR_LaTeX: :environment longtable :align |r|l|l|p{8cm}|

seems to be ignored.

Is it possible to tweak the output for 'orgtbl' to insert hlines?

The other solution of course would be to not use 'tabulate' but generate
the table explicitly.

Cheers,

Loris


John Kitchin <jkitchin@andrew.cmu.edu> writes:

> Here is another 'source block' solution, this time in python. You
> could so something similar in elisp. Here I use the library of babel
> approach so you can call it wherever you want.
>
> #+name: csv
> | ID | Name         | Titel / Title | Vorname / First Name | Nachname / Surname | Institution           |
> |  3 | Carol Carrot | Prof.         | Carol                | Carrot             | University of Veg     |
> |  1 | Alice Apple  | Fr./Ms.       | Alice                | Apple              | Universität zum Apfel |
> |  2 | Bob Birne    | Hr./Mr.       | Bob                  | Birne              | Pear University       |
>
> See https://orgmode.org/worg/org-contrib/babel/library-of-babel.html
>
> #+name: signature-table
> #+BEGIN_SRC python  :var data=csv :results value raw
> results = [[surname, firstname, ""] for _, _, _, firstname, surname, _ in data[1:]]
>
> sorted_results = sorted(results,key=lambda row: row[1])
>
> sorted_results = [[i + 1] + result for i, result in enumerate(sorted_results)]
>
> import tabulate
> return tabulate.tabulate(sorted_results, ['#', 'Surname', 'First name', 'Signature'], tablefmt='orgtbl')
> #+END_SRC
>
> #+call: signature-table(data=csv)
>
> #+RESULTS:
> | # | Surname | First name | Signature |
> |---+---------+------------+-----------|
> | 1 | Apple   | Alice      |           |
> | 2 | Birne   | Bob        |           |
> | 3 | Carrot  | Carol      |           |
>
> -----------------------------------
> Professor John Kitchin 
> Doherty Hall A207F
> Department of Chemical Engineering
> Carnegie Mellon University
> Pittsburgh, PA 15213
> 412-268-7803
> @johnkitchin
> http://kitchingroup.cheme.cmu.edu
>
> On Mon, Sep 16, 2019 at 8:48 AM Loris Bennett <loris.bennett@fu-berlin.de> wrote:
>
>  Hi John,
>
>  Thanks - that's a nicely compact solution, albeit in the category
>  'source block' and in a language I'm not very skilled at :-)
>
>  I realise that I have slightly misstated the problem.  The ID in the
>  imported CSV is just a key from the database - I don't need it on the
>  list of participants.  However, it would be nice to number the
>  participants, who are sorted by surname.
>
>  How would I insert a column which just numbers the row?
>
>  Cheers,
>
>  Loris
>
>  John Kitchin <jkitchin@andrew.cmu.edu> writes:
>
>  > You can do something like this:
>  >
>  > #+name: csv
>  > | ID | Name         | Titel / Title | Vorname / First Name | Nachname / Surname | Institution           |
>  > |  1 | Alice Apple  | Fr./Ms.       | Alice                | Apple              | Universität zum Apfel |
>  > |  2 | Bob Birne    | Hr./Mr.       | Bob                  | Birne              | Pear University       |
>  > |  3 | Carol Carrot | Prof.         | Carol                | Carrot             | University of Veg     |
>  >
>  > #+BEGIN_SRC emacs-lisp :var data=csv
>  > (let ((table (mapcar (lambda (row) (list (nth 0 row) (nth 4 row) (nth 3 row))) data)))
>  >   (setf (car table) (append (car table) '("Signature")))
>  >   table) 
>  > #+END_SRC
>  >
>  > #+RESULTS:
>  > | ID | Nachname / Surname | Vorname / First Name | Signature |
>  > |  1 | Apple              | Alice                |           |
>  > |  2 | Birne              | Bob                  |           |
>  > |  3 | Carrot             | Carol                |           |
>  >
>  > John
>  >
>  > -----------------------------------
>  > Professor John Kitchin 
>  > Doherty Hall A207F
>  > Department of Chemical Engineering
>  > Carnegie Mellon University
>  > Pittsburgh, PA 15213
>  > 412-268-7803
>  > @johnkitchin
>  > http://kitchingroup.cheme.cmu.edu
>  >
>  > On Fri, Sep 13, 2019 at 9:36 AM Loris Bennett <loris.bennett@fu-berlin.de> wrote:
>  >
>  >  Hi,
>  >
>  >  I want to create a list of participants of an event which people can
>  >  sign, so that I can record who actually turned up.
>  >
>  >  From the registration website I can download a CSV file and import it
>  >  into and org file:
>  >
>  >  | ID | Name         | Titel / Title | Vorname / First Name | Nachname / Surname | Institution           |
>  >  |  1 | Alice Apple  | Fr./Ms.       | Alice                | Apple              | Universität zum Apfel |
>  >  |  2 | Bob Birne    | Hr./Mr.       | Bob                  | Birne              | Pear University       |
>  >  |  3 | Carol Carrot | Prof.         | Carol                | Carrot             | University of Veg     |
>  >
>  >  I would like to reduce this to
>  >
>  >  | ID | Nachname / Surname | Vorname / First Name | Signature |
>  >  |  1 | Apple              | Alice                |           |
>  >  |  2 | Birne              | Bob                  |           |
>  >  |  3 | Carrot             | Carol                |           |
>  >
>  >  and then print it out as a LaTeX table.
>  >
>  >  I can obviously write a source block of Python or R to do this, but can
>  >  I manipulate the table more directly in Org?
>  >
>  >  Cheers,
>  >
>  >  Loris
>  >
>  >  -- 
>  >  This signature is currently under construction.
>  >
>  -- 
>  Dr. Loris Bennett (Mr.)
>  ZEDAT, Freie Universität Berlin         Email loris.bennett@fu-berlin.de
>
-- 
Dr. Loris Bennett (Mr.)
ZEDAT, Freie Universität Berlin         Email loris.bennett@fu-berlin.de

  reply	other threads:[~2019-09-17 10:02 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-09-13 13:33 Import CSV file, remove columns, print table Loris Bennett
2019-09-13 13:42 ` John Kitchin
2019-09-16 12:45   ` Loris Bennett
2019-09-16 13:31     ` John Kitchin
2019-09-17 10:02       ` Loris Bennett [this message]
2019-09-13 14:23 ` Fraga, Eric

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.orgmode.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=877e671brk.fsf@hornfels.zedat.fu-berlin.de \
    --to=loris.bennett@fu-berlin.de \
    --cc=emacs-orgmode@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).