doc: clarify csv rules application order
This commit is contained in:
parent
f92590f92c
commit
3e5f0e8dd5
@ -292,6 +292,37 @@ This will generate a [balance assertion](journal.html#balance-assertions)
|
||||
(or if the amount is left empty, a [balance assignment](journal.html#balance-assignments)),
|
||||
on the appropriate posting, whenever the running balance field is non-empty.
|
||||
|
||||
## References to other fields and evaluation order
|
||||
|
||||
Field assignments could include references to other fields or even to the same field you are trying to assign:
|
||||
|
||||
```
|
||||
fields date,description,currency,amount1
|
||||
|
||||
amount1 %amount1 USD
|
||||
amount1 %amount1 EUR
|
||||
amount1 %amount1 %currency
|
||||
|
||||
if SOME_REGEXP
|
||||
amount1 %amount1 GBP
|
||||
```
|
||||
This is how this file would be evaluated.
|
||||
|
||||
First, parts of CVS record are assigned according to `fields` directive.
|
||||
|
||||
Then all other field assignments -- written at top level, or included in `if` blocks -- are considered to see if they should be applied. They are checked in the order they are written, with later assignment overwriting earlier ones.
|
||||
|
||||
Once full set of field assignments that should be applied is known, their values are computed, and this is when all `%<fieldname>` references are evaluated.
|
||||
|
||||
So for a particular row from CSV file, value from fourth column would be assigned to `amount1`.
|
||||
|
||||
Then `hledger` will decide that `amount1` would have to be amended to `%amount1 USD`, but this will not happen immediately. This choice would be replaced by decision to rewrite `amount1` to `%amount EUR`, which will in turn be thrown away in favor of `%amount1 %currency`. If the `if` block condition will match the row, it will assign `amount1` to `%amount1 GBP`.
|
||||
|
||||
Overall, we will end up with one of the two alternatives for `amount1` - either `%amount1 %currency` or `%amount1 GBP`.
|
||||
|
||||
Now substitution of all referenced values will happen, using the current values for `%amount1` and `currency`, which were provided by the `fields` directive.
|
||||
|
||||
|
||||
## Reading multiple CSV files
|
||||
|
||||
You can read multiple CSV files at once using multiple `-f` arguments on the command line,
|
||||
|
||||
Loading…
Reference in New Issue
Block a user