emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: Cecil Westerhof <CecilWesterhof@xs4all.nl>
To: org-mode <emacs-orgmode@gnu.org>
Subject: Re: how to clear computed values
Date: Wed, 11 Jul 2007 10:26:25 +0200	[thread overview]
Message-ID: <1184142385.6253.115.camel@Barebusta.DecebalComp> (raw)
In-Reply-To: <93de834e13e5289b11185b67cf4162b0@science.uva.nl>

Op wo, 11-07-2007 te 08:15 +0200, schreef Carsten Dominik:
> If you want to understand why things come out the way they
> do, use formular debugging (this is an option in the menu, but
> cou can also toggle it with `C-C {').  When you then execute
> calculations in the table (for example with `C-u C-c C-c')
> you will get detailed information about variable substitution,
> and you will see the final expression that gets evaluated.

That is a good tip. ;-}


> For example, you are trying things like
> 
>    (and $1 $2 ...
> 
> but of course both the empty string and the number 0 are
> "true" in Lisp, the only thing false in Lisp is "nil".

That explains my problems.


> If you want to fix it, you can, by *really* taking control.
> For example, define the following function that tests
> if a value is not zero
> 
> (defun nz (n) (not (= n 0.)))
> 
> and then write your table like this:
> 
>    |---------+------+---------+--------+-------+----------+--------|
>    | kmstand | km's | prijs/l | liters | prijs | prijs/km |   km/l |
>    |---------+------+---------+--------+-------+----------+--------|
>    |  155111 |      |         |        |       |          |        |
>    |  156146 | 1035 |   102.2 |  62.25 | 63.62 |    6.147 | 16.627 |
>    |         |      |         |        |       |          |        |
>    |---------+------+---------+--------+-------+----------+--------|
> #+TBLFM: $2='(if (and (nz @-1$-1) (nz $1) (> $1 @-1$-1)) (- $1 @-1$-1) 
> "");N::$5='(if (and (nz $3) (nz $4)) (format "%.2f" (/ (* $3 $4) 100)) 
> "");N::$6='(if (and (nz $2) (nz $5)) (format "%.3f" (/ (* $5 100) $2)) 
> "");N::$7='(if (and (nz $2) (nz $4)) (format "%.3f" (/ $2 $4)) "");N

That works perfect.


> Yes, those equations look longish - use the formula
> editor to edit them.

That is also a nice tool yes.


> Also, consider to put the "#" marker in the first column,
> to get this table to recompute automatically while
> you step through with TAB.  Use C-# in the first data line
> to insert the "#" if you want to make sure that your
> existing formulas are modified to reflect the new
> column numbers.  The result will be this:

That is also very usefull.


> Hope this helps.

It certainly did.

I made another improvement. It would be nice to have a notification when
there is a problem with kmstand.
I made the folowing:
        |---+------------+---------+-------------------+---------+--------+-------+----------+--------|
        |   |      datum | kmstand | km's              | prijs/l | liters | prijs | prijs/km |   km/l |
        |---+------------+---------+-------------------+---------+--------+-------+----------+--------|
        | # |            |  155111 | Verkeerde kmstand |         |        |       |          |        |
        | # | 2007-07-09 |  156146 | 1035              |   102.2 |  62.25 | 63.62 |    6.147 | 16.627 |
        | # |            |    6953 | Verkeerde kmstand |         |        |       |          |        |
        | # |            |         |                   |         |        |       |          |        |
        |---+------------+---------+-------------------+---------+--------+-------+----------+--------|
        #+TBLFM: $4='(if (and (nz @-1$3) (nz $3)) (if (> $3 @-1$3) (- $3 @-1$3) "Verkeerde kmstand") "");N::$7='(if (and (nz $5) (nz $6)) (format "%.2f" (/ (* $5 $6) 100)) "");N::$8='(if (and (nz $4) (nz $7)) (format "%.3f" (/ (* $7 100) $4)) "");N::$9='(if (and (nz $4) (nz $6)) (format "%.3f" (/ $4 $6)) "");N
In this example the first two digits of kmstand where not input at row 3
and you get a message. But you get also a message at the first row. Is
it possible to circumvent this?

Is it possible to define functions in an org-file? For example: it would
be nice to have more extensive checking on the values. Also the nz could
be defined. It is in my .emacs now, but when I transfer the file to
another computer, there is a risk that it doe not work anymore.

It would be nice if I did input kmstand that with tab you go to prijs/l.
(Skipping fields with formula's.) And when giving tab on the field
liters going to the field kmstand. Is that something that could be made?

-- 
Cecil Westerhof <CecilWesterhof@xs4all.nl>

  reply	other threads:[~2007-07-11  8:26 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-07-10 18:38 how to clear computed values Cecil Westerhof
2007-07-11  6:15 ` Carsten Dominik
2007-07-11  8:26   ` Cecil Westerhof [this message]
2007-07-11  8:49     ` Carsten Dominik
2007-07-11  9:02       ` Cecil Westerhof
2007-07-11 10:19         ` Carsten Dominik
2007-07-11 11:02           ` Cecil Westerhof
2007-07-11 11:21             ` Carsten Dominik
2007-07-11  7:22 ` Cecil Westerhof

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=1184142385.6253.115.camel@Barebusta.DecebalComp \
    --to=cecilwesterhof@xs4all.nl \
    --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).