;update manuals

This commit is contained in:
Simon Michael 2020-11-09 11:09:55 -08:00
parent 7cf7bcbf96
commit 895783ebe0
6 changed files with 1103 additions and 948 deletions

View File

@ -75,7 +75,12 @@ T}
T{ T{
\f[B]\f[CB]date-format\f[B]\f[R] \f[B]\f[CB]date-format\f[B]\f[R]
T}@T{ T}@T{
describe the format of CSV dates how to parse dates in CSV records
T}
T{
\f[B]\f[CB]decimal-mark\f[B]\f[R]
T}@T{
the decimal mark used in CSV amounts, if ambiguous
T} T}
T{ T{
\f[B]\f[CB]newest-first\f[B]\f[R] \f[B]\f[CB]newest-first\f[B]\f[R]
@ -866,6 +871,27 @@ For the supported strptime syntax, see:
.P .P
.PD .PD
https://hackage.haskell.org/package/time/docs/Data-Time-Format.html#v:formatTime https://hackage.haskell.org/package/time/docs/Data-Time-Format.html#v:formatTime
.SS \f[C]decimal-mark\f[R]
.IP
.nf
\f[C]
decimal-mark .
\f[R]
.fi
.PP
or:
.IP
.nf
\f[C]
decimal-mark ,
\f[R]
.fi
.PP
hledger automatically accepts either period or comma as a decimal mark
when parsing numbers (cf Amounts).
However if any numbers in the CSV contain digit group marks, such as
thousand-separating commas, you should declare the decimal mark
explicitly with this rule, to avoid misparsed numbers.
.SS \f[C]newest-first\f[R] .SS \f[C]newest-first\f[R]
.PP .PP
hledger always sorts the generated transactions by date. hledger always sorts the generated transactions by date.

View File

@ -42,7 +42,9 @@ after the examples:
*'if' table* apply some rules to CSV records matched *'if' table* apply some rules to CSV records matched
by patterns, alternate syntax by patterns, alternate syntax
*'end'* skip the remaining CSV records *'end'* skip the remaining CSV records
*'date-format'* describe the format of CSV dates *'date-format'* how to parse dates in CSV records
*'decimal-mark'* the decimal mark used in CSV amounts,
if ambiguous
*'newest-first'* disambiguate record order when there's *'newest-first'* disambiguate record order when there's
only one date only one date
*'include'* inline another CSV rules file *'include'* inline another CSV rules file
@ -387,6 +389,7 @@ Blank lines and lines beginning with '#' or ';' are ignored.
* if table:: * if table::
* end:: * end::
* date-format:: * date-format::
* decimal-mark::
* newest-first:: * newest-first::
* include:: * include::
* balance-type:: * balance-type::
@ -787,7 +790,7 @@ if ,,,,
end end
 
File: hledger_csv.info, Node: date-format, Next: newest-first, Prev: end, Up: CSV RULES File: hledger_csv.info, Node: date-format, Next: decimal-mark, Prev: end, Up: CSV RULES
2.8 'date-format' 2.8 'date-format'
================= =================
@ -818,11 +821,29 @@ date-format %-m/%-d/%Y %l:%M %p some other junk
https://hackage.haskell.org/package/time/docs/Data-Time-Format.html#v:formatTime https://hackage.haskell.org/package/time/docs/Data-Time-Format.html#v:formatTime
 
File: hledger_csv.info, Node: newest-first, Next: include, Prev: date-format, Up: CSV RULES File: hledger_csv.info, Node: decimal-mark, Next: newest-first, Prev: date-format, Up: CSV RULES
2.9 'newest-first' 2.9 'decimal-mark'
================== ==================
decimal-mark .
or:
decimal-mark ,
hledger automatically accepts either period or comma as a decimal
mark when parsing numbers (cf Amounts). However if any numbers in the
CSV contain digit group marks, such as thousand-separating commas, you
should declare the decimal mark explicitly with this rule, to avoid
misparsed numbers.

File: hledger_csv.info, Node: newest-first, Next: include, Prev: decimal-mark, Up: CSV RULES
2.10 'newest-first'
===================
hledger always sorts the generated transactions by date. Transactions hledger always sorts the generated transactions by date. Transactions
on the same date should appear in the same order as their CSV records, on the same date should appear in the same order as their CSV records,
as hledger can usually auto-detect whether the CSV's normal order is as hledger can usually auto-detect whether the CSV's normal order is
@ -842,7 +863,7 @@ newest-first
 
File: hledger_csv.info, Node: include, Next: balance-type, Prev: newest-first, Up: CSV RULES File: hledger_csv.info, Node: include, Next: balance-type, Prev: newest-first, Up: CSV RULES
2.10 'include' 2.11 'include'
============== ==============
include RULESFILE include RULESFILE
@ -865,7 +886,7 @@ include categorisation.rules
 
File: hledger_csv.info, Node: balance-type, Prev: include, Up: CSV RULES File: hledger_csv.info, Node: balance-type, Prev: include, Up: CSV RULES
2.11 'balance-type' 2.12 'balance-type'
=================== ===================
Balance assertions generated by assigning to balanceN are of the simple Balance assertions generated by assigning to balanceN are of the simple
@ -1171,84 +1192,86 @@ command the user specified.
 
Tag Table: Tag Table:
Node: Top72 Node: Top72
Node: EXAMPLES2677 Node: EXAMPLES2793
Ref: #examples2783 Ref: #examples2899
Node: Basic2991 Node: Basic3107
Ref: #basic3091 Ref: #basic3207
Node: Bank of Ireland3633 Node: Bank of Ireland3749
Ref: #bank-of-ireland3768 Ref: #bank-of-ireland3884
Node: Amazon5230 Node: Amazon5346
Ref: #amazon5348 Ref: #amazon5464
Node: Paypal7067 Node: Paypal7183
Ref: #paypal7161 Ref: #paypal7277
Node: CSV RULES14805 Node: CSV RULES14921
Ref: #csv-rules14914 Ref: #csv-rules15030
Node: skip15209 Node: skip15342
Ref: #skip15302 Ref: #skip15435
Node: fields15677 Node: fields15810
Ref: #fields15799 Ref: #fields15932
Node: Transaction field names16964 Node: Transaction field names17097
Ref: #transaction-field-names17124 Ref: #transaction-field-names17257
Node: Posting field names17235 Node: Posting field names17368
Ref: #posting-field-names17387 Ref: #posting-field-names17520
Node: account17457 Node: account17590
Ref: #account17573 Ref: #account17706
Node: amount18110 Node: amount18243
Ref: #amount18241 Ref: #amount18374
Node: currency19348 Node: currency19481
Ref: #currency19483 Ref: #currency19616
Node: balance19689 Node: balance19822
Ref: #balance19823 Ref: #balance19956
Node: comment20140 Node: comment20273
Ref: #comment20257 Ref: #comment20390
Node: field assignment20420 Node: field assignment20553
Ref: #field-assignment20563 Ref: #field-assignment20696
Node: separator21381 Node: separator21514
Ref: #separator21516 Ref: #separator21649
Node: if block22056 Node: if block22189
Ref: #if-block22181 Ref: #if-block22314
Node: Matching the whole record22582 Node: Matching the whole record22715
Ref: #matching-the-whole-record22757 Ref: #matching-the-whole-record22890
Node: Matching individual fields23561 Node: Matching individual fields23694
Ref: #matching-individual-fields23765 Ref: #matching-individual-fields23898
Node: Combining matchers23989 Node: Combining matchers24122
Ref: #combining-matchers24185 Ref: #combining-matchers24318
Node: Rules applied on successful match24498 Node: Rules applied on successful match24631
Ref: #rules-applied-on-successful-match24689 Ref: #rules-applied-on-successful-match24822
Node: if table25343 Node: if table25476
Ref: #if-table25462 Ref: #if-table25595
Node: end27200 Node: end27333
Ref: #end27312 Ref: #end27445
Node: date-format27536 Node: date-format27669
Ref: #date-format27668 Ref: #date-format27801
Node: newest-first28417 Node: decimal-mark28550
Ref: #newest-first28555 Ref: #decimal-mark28693
Node: include29238 Node: newest-first29032
Ref: #include29369 Ref: #newest-first29173
Node: balance-type29813 Node: include29856
Ref: #balance-type29933 Ref: #include29987
Node: TIPS30633 Node: balance-type30431
Ref: #tips30715 Ref: #balance-type30551
Node: Rapid feedback30971 Node: TIPS31251
Ref: #rapid-feedback31088 Ref: #tips31333
Node: Valid CSV31548 Node: Rapid feedback31589
Ref: #valid-csv31678 Ref: #rapid-feedback31706
Node: File Extension31870 Node: Valid CSV32166
Ref: #file-extension32022 Ref: #valid-csv32296
Node: Reading multiple CSV files32451 Node: File Extension32488
Ref: #reading-multiple-csv-files32636 Ref: #file-extension32640
Node: Valid transactions32877 Node: Reading multiple CSV files33069
Ref: #valid-transactions33055 Ref: #reading-multiple-csv-files33254
Node: Deduplicating importing33683 Node: Valid transactions33495
Ref: #deduplicating-importing33862 Ref: #valid-transactions33673
Node: Setting amounts34895 Node: Deduplicating importing34301
Ref: #setting-amounts35064 Ref: #deduplicating-importing34480
Node: Setting currency/commodity36051 Node: Setting amounts35513
Ref: #setting-currencycommodity36243 Ref: #setting-amounts35682
Node: Referencing other fields37417 Node: Setting currency/commodity36669
Ref: #referencing-other-fields37617 Ref: #setting-currencycommodity36861
Node: How CSV rules are evaluated38514 Node: Referencing other fields38035
Ref: #how-csv-rules-are-evaluated38687 Ref: #referencing-other-fields38235
Node: How CSV rules are evaluated39132
Ref: #how-csv-rules-are-evaluated39305
 
End Tag Table End Tag Table

View File

@ -39,26 +39,28 @@ DESCRIPTION
if table apply some rules to CSV records matched if table apply some rules to CSV records matched
by patterns, alternate syntax by patterns, alternate syntax
end skip the remaining CSV records end skip the remaining CSV records
date-format describe the format of CSV dates date-format how to parse dates in CSV records
newest-first disambiguate record order when there's decimal-mark the decimal mark used in CSV amounts, if
ambiguous
newest-first disambiguate record order when there's
only one date only one date
include inline another CSV rules file include inline another CSV rules file
balance-type choose which type of balance assignments balance-type choose which type of balance assignments
to use to use
Note, for best error messages when reading CSV files, use a .csv, .tsv Note, for best error messages when reading CSV files, use a .csv, .tsv
or .ssv file extension or file prefix - see File Extension below. or .ssv file extension or file prefix - see File Extension below.
There's an introductory Convert CSV files tutorial on hledger.org. There's an introductory Convert CSV files tutorial on hledger.org.
EXAMPLES EXAMPLES
Here are some sample hledger CSV rules files. See also the full col- Here are some sample hledger CSV rules files. See also the full col-
lection at: lection at:
https://github.com/simonmichael/hledger/tree/master/examples/csv https://github.com/simonmichael/hledger/tree/master/examples/csv
Basic Basic
At minimum, the rules file must identify the date and amount fields, At minimum, the rules file must identify the date and amount fields,
and often it also specifies the date format and how many header lines and often it also specifies the date format and how many header lines
there are. Here's a simple CSV file and a rules file for it: there are. Here's a simple CSV file and a rules file for it:
Date, Description, Id, Amount Date, Description, Id, Amount
@ -77,8 +79,8 @@ EXAMPLES
Default account names are chosen, since we didn't set them. Default account names are chosen, since we didn't set them.
Bank of Ireland Bank of Ireland
Here's a CSV with two amount fields (Debit and Credit), and a balance Here's a CSV with two amount fields (Debit and Credit), and a balance
field, which we can use to add balance assertions, which is not neces- field, which we can use to add balance assertions, which is not neces-
sary but provides extra error checking: sary but provides extra error checking:
Date,Details,Debit,Credit,Balance Date,Details,Debit,Credit,Balance
@ -120,13 +122,13 @@ EXAMPLES
assets:bank:boi:checking EUR-5.0 = EUR126.0 assets:bank:boi:checking EUR-5.0 = EUR126.0
expenses:unknown EUR5.0 expenses:unknown EUR5.0
The balance assertions don't raise an error above, because we're read- The balance assertions don't raise an error above, because we're read-
ing directly from CSV, but they will be checked if these entries are ing directly from CSV, but they will be checked if these entries are
imported into a journal file. imported into a journal file.
Amazon Amazon
Here we convert amazon.com order history, and use an if block to gener- Here we convert amazon.com order history, and use an if block to gener-
ate a third posting if there's a fee. (In practice you'd probably get ate a third posting if there's a fee. (In practice you'd probably get
this data from your bank instead, but it's an example.) this data from your bank instead, but it's an example.)
"Date","Type","To/From","Name","Status","Amount","Fees","Transaction ID" "Date","Type","To/From","Name","Status","Amount","Fees","Transaction ID"
@ -178,7 +180,7 @@ EXAMPLES
expenses:fees $1.00 expenses:fees $1.00
Paypal Paypal
Here's a real-world rules file for (customised) Paypal CSV, with some Here's a real-world rules file for (customised) Paypal CSV, with some
Paypal-specific rules, and a second rules file included: Paypal-specific rules, and a second rules file included:
"Date","Time","TimeZone","Name","Type","Status","Currency","Gross","Fee","Net","From Email Address","To Email Address","Transaction ID","Item Title","Item ID","Reference Txn ID","Receipt ID","Balance","Note" "Date","Time","TimeZone","Name","Type","Status","Currency","Gross","Fee","Net","From Email Address","To Email Address","Transaction ID","Item Title","Item ID","Reference Txn ID","Receipt ID","Balance","Note"
@ -333,9 +335,9 @@ CSV RULES
skip skip
skip N skip N
The word "skip" followed by a number (or no number, meaning 1) tells The word "skip" followed by a number (or no number, meaning 1) tells
hledger to ignore this many non-empty lines preceding the CSV data. hledger to ignore this many non-empty lines preceding the CSV data.
(Empty/blank lines are skipped automatically.) You'll need this when- (Empty/blank lines are skipped automatically.) You'll need this when-
ever your CSV data contains header lines. ever your CSV data contains header lines.
It also has a second purpose: it can be used inside if blocks to ignore It also has a second purpose: it can be used inside if blocks to ignore
@ -344,27 +346,27 @@ CSV RULES
fields fields
fields FIELDNAME1, FIELDNAME2, ... fields FIELDNAME1, FIELDNAME2, ...
A fields list (the word "fields" followed by comma-separated field A fields list (the word "fields" followed by comma-separated field
names) is the quick way to assign CSV field values to hledger fields. names) is the quick way to assign CSV field values to hledger fields.
It does two things: It does two things:
1. it names the CSV fields. This is optional, but can be convenient 1. it names the CSV fields. This is optional, but can be convenient
later for interpolating them. later for interpolating them.
2. when you use a standard hledger field name, it assigns the CSV value 2. when you use a standard hledger field name, it assigns the CSV value
to that part of the hledger transaction. to that part of the hledger transaction.
Here's an example that says "use the 1st, 2nd and 4th fields as the Here's an example that says "use the 1st, 2nd and 4th fields as the
transaction's date, description and amount; name the last two fields transaction's date, description and amount; name the last two fields
for later reference; and ignore the others": for later reference; and ignore the others":
fields date, description, , amount, , , somefield, anotherfield fields date, description, , amount, , , somefield, anotherfield
Field names may not contain whitespace. Fields you don't care about Field names may not contain whitespace. Fields you don't care about
can be left unnamed. Currently there must be least two items (there can be left unnamed. Currently there must be least two items (there
must be at least one comma). must be at least one comma).
Note, always use comma in the fields list, even if your CSV uses an- Note, always use comma in the fields list, even if your CSV uses an-
other separator character. other separator character.
Here are the standard hledger field/pseudo-field names. For more about Here are the standard hledger field/pseudo-field names. For more about
@ -377,52 +379,52 @@ CSV RULES
Posting field names Posting field names
account account
accountN, where N is 1 to 99, causes a posting to be generated, with accountN, where N is 1 to 99, causes a posting to be generated, with
that account name. that account name.
Most often there are two postings, so you'll want to set account1 and Most often there are two postings, so you'll want to set account1 and
account2. Typically account1 is associated with the CSV file, and is account2. Typically account1 is associated with the CSV file, and is
set once with a top-level assignment, while account2 is set based on set once with a top-level assignment, while account2 is set based on
each transaction's description, and in conditional blocks. each transaction's description, and in conditional blocks.
If a posting's account name is left unset but its amount is set (see If a posting's account name is left unset but its amount is set (see
below), a default account name will be chosen (like "expenses:unknown" below), a default account name will be chosen (like "expenses:unknown"
or "income:unknown"). or "income:unknown").
amount amount
amountN sets posting N's amount. If the CSV uses separate fields for amountN sets posting N's amount. If the CSV uses separate fields for
inflows and outflows, you can use amountN-in and amountN-out instead. inflows and outflows, you can use amountN-in and amountN-out instead.
By assigning to amount1, amount2, ... etc. you can generate anywhere By assigning to amount1, amount2, ... etc. you can generate anywhere
from 0 to 99 postings. from 0 to 99 postings.
There is also an older, unnumbered form of these names, suitable for There is also an older, unnumbered form of these names, suitable for
2-posting transactions, which sets both posting 1's and (negated) post- 2-posting transactions, which sets both posting 1's and (negated) post-
ing 2's amount: amount, or amount-in and amount-out. This is still ing 2's amount: amount, or amount-in and amount-out. This is still
supported because it keeps pre-hledger-1.17 csv rules files working, supported because it keeps pre-hledger-1.17 csv rules files working,
and because it can be more succinct, and because it converts posting and because it can be more succinct, and because it converts posting
2's amount to cost if there's a transaction price, which can be useful. 2's amount to cost if there's a transaction price, which can be useful.
If you have an existing rules file using the unnumbered form, you might If you have an existing rules file using the unnumbered form, you might
want to use the numbered form in certain conditional blocks, without want to use the numbered form in certain conditional blocks, without
having to update and retest all the old rules. To facilitate this, having to update and retest all the old rules. To facilitate this,
posting 1 ignores amount/amount-in/amount-out if any of posting 1 ignores amount/amount-in/amount-out if any of
amount1/amount1-in/amount1-out are assigned, and posting 2 ignores them amount1/amount1-in/amount1-out are assigned, and posting 2 ignores them
if any of amount2/amount2-in/amount2-out are assigned, avoiding con- if any of amount2/amount2-in/amount2-out are assigned, avoiding con-
flicts. flicts.
currency currency
If the CSV has the currency symbol in a separate field (ie, not part of If the CSV has the currency symbol in a separate field (ie, not part of
the amount field), you can use currencyN to prepend it to posting N's the amount field), you can use currencyN to prepend it to posting N's
amount. Or, currency with no number affects all postings. amount. Or, currency with no number affects all postings.
balance balance
balanceN sets a balance assertion amount (or if the posting amount is balanceN sets a balance assertion amount (or if the posting amount is
left empty, a balance assignment) on posting N. left empty, a balance assignment) on posting N.
Also, for compatibility with hledger <1.17: balance with no number is Also, for compatibility with hledger <1.17: balance with no number is
equivalent to balance1. equivalent to balance1.
You can adjust the type of assertion/assignment with the balance-type You can adjust the type of assertion/assignment with the balance-type
rule (see below). rule (see below).
comment comment
@ -434,11 +436,11 @@ CSV RULES
field assignment field assignment
HLEDGERFIELDNAME FIELDVALUE HLEDGERFIELDNAME FIELDVALUE
Instead of or in addition to a fields list, you can use a "field as- Instead of or in addition to a fields list, you can use a "field as-
signment" rule to set the value of a single hledger field, by writing signment" rule to set the value of a single hledger field, by writing
its name (any of the standard hledger field names above) followed by a its name (any of the standard hledger field names above) followed by a
text value. The value may contain interpolated CSV fields, referenced text value. The value may contain interpolated CSV fields, referenced
by their 1-based position in the CSV record (%N), or by the name they by their 1-based position in the CSV record (%N), or by the name they
were given in the fields list (%CSVFIELDNAME). Some examples: were given in the fields list (%CSVFIELDNAME). Some examples:
# set the amount to the 4th CSV field, with " USD" appended # set the amount to the 4th CSV field, with " USD" appended
@ -447,14 +449,14 @@ CSV RULES
# combine three fields to make a comment, containing note: and date: tags # combine three fields to make a comment, containing note: and date: tags
comment note: %somefield - %anotherfield, date: %1 comment note: %somefield - %anotherfield, date: %1
Interpolation strips outer whitespace (so a CSV value like " 1 " be- Interpolation strips outer whitespace (so a CSV value like " 1 " be-
comes 1 when interpolated) (#1051). See TIPS below for more about ref- comes 1 when interpolated) (#1051). See TIPS below for more about ref-
erencing other fields. erencing other fields.
separator separator
You can use the separator rule to read other kinds of character-sepa- You can use the separator rule to read other kinds of character-sepa-
rated data. The argument is any single separator character, or the rated data. The argument is any single separator character, or the
words tab or space (case insensitive). Eg, for comma-separated values words tab or space (case insensitive). Eg, for comma-separated values
(CSV): (CSV):
separator , separator ,
@ -467,7 +469,7 @@ CSV RULES
separator TAB separator TAB
If the input file has a .csv, .ssv or .tsv file extension (or a csv:, If the input file has a .csv, .ssv or .tsv file extension (or a csv:,
ssv:, tsv: prefix), the appropriate separator will be inferred automat- ssv:, tsv: prefix), the appropriate separator will be inferred automat-
ically, and you won't need this rule. ically, and you won't need this rule.
@ -482,8 +484,8 @@ CSV RULES
RULE RULE
RULE RULE
Conditional blocks ("if blocks") are a block of rules that are applied Conditional blocks ("if blocks") are a block of rules that are applied
only to CSV records which match certain patterns. They are often used only to CSV records which match certain patterns. They are often used
for customising account names based on transaction descriptions. for customising account names based on transaction descriptions.
Matching the whole record Matching the whole record
@ -491,16 +493,16 @@ CSV RULES
REGEX REGEX
REGEX is a case-insensitive regular expression which tries to match REGEX is a case-insensitive regular expression which tries to match
anywhere within the CSV record. It is a POSIX ERE (extended regular anywhere within the CSV record. It is a POSIX ERE (extended regular
expression) that also supports GNU word boundaries (\b, \B, \<, \>), expression) that also supports GNU word boundaries (\b, \B, \<, \>),
and nothing else. If you have trouble, be sure to check our and nothing else. If you have trouble, be sure to check our
https://hledger.org/hledger.html#regular-expressions doc. https://hledger.org/hledger.html#regular-expressions doc.
Important note: the record that is matched is not the original record, Important note: the record that is matched is not the original record,
but a synthetic one, with any enclosing double quotes (but not enclos- but a synthetic one, with any enclosing double quotes (but not enclos-
ing whitespace) removed, and always comma-separated (which means that a ing whitespace) removed, and always comma-separated (which means that a
field containing a comma will appear like two fields). Eg, if the field containing a comma will appear like two fields). Eg, if the
original record is 2020-01-01; "Acme, Inc."; 1,000, the REGEX will ac- original record is 2020-01-01; "Acme, Inc."; 1,000, the REGEX will ac-
tually see 2020-01-01,Acme, Inc., 1,000). tually see 2020-01-01,Acme, Inc., 1,000).
@ -509,14 +511,14 @@ CSV RULES
%CSVFIELD REGEX %CSVFIELD REGEX
which matches just the content of a particular CSV field. CSVFIELD is which matches just the content of a particular CSV field. CSVFIELD is
a percent sign followed by the field's name or column number, like a percent sign followed by the field's name or column number, like
%date or %1. %date or %1.
Combining matchers Combining matchers
A single matcher can be written on the same line as the "if"; or multi- A single matcher can be written on the same line as the "if"; or multi-
ple matchers can be written on the following lines, non-indented. Mul- ple matchers can be written on the following lines, non-indented. Mul-
tiple matchers are OR'd (any one of them can match), unless one begins tiple matchers are OR'd (any one of them can match), unless one begins
with an & symbol, in which case it is AND'ed with the previous matcher. with an & symbol, in which case it is AND'ed with the previous matcher.
if if
@ -525,8 +527,8 @@ CSV RULES
RULE RULE
Rules applied on successful match Rules applied on successful match
After the patterns there should be one or more rules to apply, all in- After the patterns there should be one or more rules to apply, all in-
dented by at least one space. Three kinds of rule are allowed in con- dented by at least one space. Three kinds of rule are allowed in con-
ditional blocks: ditional blocks:
o field assignments (to set a hledger field) o field assignments (to set a hledger field)
@ -556,11 +558,11 @@ CSV RULES
MATCHER3,VALUE31,VALUE32,...,VALUE3n MATCHER3,VALUE31,VALUE32,...,VALUE3n
<empty line> <empty line>
Conditional tables ("if tables") are a different syntax to specify Conditional tables ("if tables") are a different syntax to specify
field assignments that will be applied only to CSV records which match field assignments that will be applied only to CSV records which match
certain patterns. certain patterns.
MATCHER could be either field or record matcher, as described above. MATCHER could be either field or record matcher, as described above.
When MATCHER matches, values from that row would be assigned to the CSV When MATCHER matches, values from that row would be assigned to the CSV
fields named on the if line, in the same order. fields named on the if line, in the same order.
@ -584,17 +586,17 @@ CSV RULES
... ...
CSVFIELDNAMEn VALUE3n CSVFIELDNAMEn VALUE3n
Each line starting with MATCHER should contain enough (possibly empty) Each line starting with MATCHER should contain enough (possibly empty)
values for all the listed fields. values for all the listed fields.
Rules would be checked and applied in the order they are listed in the Rules would be checked and applied in the order they are listed in the
table and, like with if blocks, later rules (in the same or another ta- table and, like with if blocks, later rules (in the same or another ta-
ble) or if blocks could override the effect of any rule. ble) or if blocks could override the effect of any rule.
Instead of ',' you can use a variety of other non-alphanumeric charac- Instead of ',' you can use a variety of other non-alphanumeric charac-
ters as a separator. First character after if is taken to be the sepa- ters as a separator. First character after if is taken to be the sepa-
rator for the rest of the table. It is the responsibility of the user rator for the rest of the table. It is the responsibility of the user
to ensure that separator does not occur inside MATCHERs and values - to ensure that separator does not occur inside MATCHERs and values -
there is no way to escape separator. there is no way to escape separator.
Example: Example:
@ -605,7 +607,7 @@ CSV RULES
2020/01/12.*Plumbing LLC,expenses:house:upkeep,emergency plumbing call-out 2020/01/12.*Plumbing LLC,expenses:house:upkeep,emergency plumbing call-out
end end
This rule can be used inside if blocks (only), to make hledger stop This rule can be used inside if blocks (only), to make hledger stop
reading this CSV file and move on to the next input file, or to command reading this CSV file and move on to the next input file, or to command
execution. Eg: execution. Eg:
@ -616,10 +618,10 @@ CSV RULES
date-format date-format
date-format DATEFMT date-format DATEFMT
This is a helper for the date (and date2) fields. If your CSV dates This is a helper for the date (and date2) fields. If your CSV dates
are not formatted like YYYY-MM-DD, YYYY/MM/DD or YYYY.MM.DD, you'll are not formatted like YYYY-MM-DD, YYYY/MM/DD or YYYY.MM.DD, you'll
need to add a date-format rule describing them with a strptime date need to add a date-format rule describing them with a strptime date
parsing pattern, which must parse the CSV date value completely. Some parsing pattern, which must parse the CSV date value completely. Some
examples: examples:
# MM/DD/YY # MM/DD/YY
@ -640,16 +642,29 @@ CSV RULES
https://hackage.haskell.org/package/time/docs/Data-Time-For- https://hackage.haskell.org/package/time/docs/Data-Time-For-
mat.html#v:formatTime mat.html#v:formatTime
decimal-mark
decimal-mark .
or:
decimal-mark ,
hledger automatically accepts either period or comma as a decimal mark
when parsing numbers (cf Amounts). However if any numbers in the CSV
contain digit group marks, such as thousand-separating commas, you
should declare the decimal mark explicitly with this rule, to avoid
misparsed numbers.
newest-first newest-first
hledger always sorts the generated transactions by date. Transactions hledger always sorts the generated transactions by date. Transactions
on the same date should appear in the same order as their CSV records, on the same date should appear in the same order as their CSV records,
as hledger can usually auto-detect whether the CSV's normal order is as hledger can usually auto-detect whether the CSV's normal order is
oldest first or newest first. But if all of the following are true: oldest first or newest first. But if all of the following are true:
o the CSV might sometimes contain just one day of data (all records o the CSV might sometimes contain just one day of data (all records
having the same date) having the same date)
o the CSV records are normally in reverse chronological order (newest o the CSV records are normally in reverse chronological order (newest
at the top) at the top)
o and you care about preserving the order of same-day transactions o and you care about preserving the order of same-day transactions
@ -662,9 +677,9 @@ CSV RULES
include include
include RULESFILE include RULESFILE
This includes the contents of another CSV rules file at this point. This includes the contents of another CSV rules file at this point.
RULESFILE is an absolute file path or a path relative to the current RULESFILE is an absolute file path or a path relative to the current
file's directory. This can be useful for sharing common rules between file's directory. This can be useful for sharing common rules between
several rules files, eg: several rules files, eg:
# someaccount.csv.rules # someaccount.csv.rules
@ -679,10 +694,10 @@ CSV RULES
balance-type balance-type
Balance assertions generated by assigning to balanceN are of the simple Balance assertions generated by assigning to balanceN are of the simple
= type by default, which is a single-commodity, subaccount-excluding = type by default, which is a single-commodity, subaccount-excluding
assertion. You may find the subaccount-including variants more useful, assertion. You may find the subaccount-including variants more useful,
eg if you have created some virtual subaccounts of checking to help eg if you have created some virtual subaccounts of checking to help
with budgeting. You can select a different type of assertion with the with budgeting. You can select a different type of assertion with the
balance-type rule: balance-type rule:
# balance assertions will consider all commodities and all subaccounts # balance assertions will consider all commodities and all subaccounts
@ -697,19 +712,19 @@ CSV RULES
TIPS TIPS
Rapid feedback Rapid feedback
It's a good idea to get rapid feedback while creating/troubleshooting It's a good idea to get rapid feedback while creating/troubleshooting
CSV rules. Here's a good way, using entr from http://eradman.com/entr- CSV rules. Here's a good way, using entr from http://eradman.com/entr-
project : project :
$ ls foo.csv* | entr bash -c 'echo ----; hledger -f foo.csv print desc:SOMEDESC' $ ls foo.csv* | entr bash -c 'echo ----; hledger -f foo.csv print desc:SOMEDESC'
A desc: query (eg) is used to select just one, or a few, transactions A desc: query (eg) is used to select just one, or a few, transactions
of interest. "bash -c" is used to run multiple commands, so we can of interest. "bash -c" is used to run multiple commands, so we can
echo a separator each time the command re-runs, making it easier to echo a separator each time the command re-runs, making it easier to
read the output. read the output.
Valid CSV Valid CSV
hledger accepts CSV conforming to RFC 4180. When CSV values are en- hledger accepts CSV conforming to RFC 4180. When CSV values are en-
closed in quotes, note: closed in quotes, note:
o they must be double quotes (not single quotes) o they must be double quotes (not single quotes)
@ -717,9 +732,9 @@ TIPS
o spaces outside the quotes are not allowed o spaces outside the quotes are not allowed
File Extension File Extension
To help hledger identify the format and show the right error messages, To help hledger identify the format and show the right error messages,
CSV/SSV/TSV files should normally be named with a .csv, .ssv or .tsv CSV/SSV/TSV files should normally be named with a .csv, .ssv or .tsv
filename extension. Or, the file path should be prefixed with csv:, filename extension. Or, the file path should be prefixed with csv:,
ssv: or tsv:. Eg: ssv: or tsv:. Eg:
$ hledger -f foo.ssv print $ hledger -f foo.ssv print
@ -728,48 +743,48 @@ TIPS
$ cat foo | hledger -f ssv:- foo $ cat foo | hledger -f ssv:- foo
You can override the file extension with a separator rule if needed. You can override the file extension with a separator rule if needed.
See also: Input files in the hledger manual. See also: Input files in the hledger manual.
Reading multiple CSV files Reading multiple CSV files
If you use multiple -f options to read multiple CSV files at once, If you use multiple -f options to read multiple CSV files at once,
hledger will look for a correspondingly-named rules file for each CSV hledger will look for a correspondingly-named rules file for each CSV
file. But if you use the --rules-file option, that rules file will be file. But if you use the --rules-file option, that rules file will be
used for all the CSV files. used for all the CSV files.
Valid transactions Valid transactions
After reading a CSV file, hledger post-processes and validates the gen- After reading a CSV file, hledger post-processes and validates the gen-
erated journal entries as it would for a journal file - balancing them, erated journal entries as it would for a journal file - balancing them,
applying balance assignments, and canonicalising amount styles. Any applying balance assignments, and canonicalising amount styles. Any
errors at this stage will be reported in the usual way, displaying the errors at this stage will be reported in the usual way, displaying the
problem entry. problem entry.
There is one exception: balance assertions, if you have generated them, There is one exception: balance assertions, if you have generated them,
will not be checked, since normally these will work only when the CSV will not be checked, since normally these will work only when the CSV
data is part of the main journal. If you do need to check balance as- data is part of the main journal. If you do need to check balance as-
sertions generated from CSV right away, pipe into another hledger: sertions generated from CSV right away, pipe into another hledger:
$ hledger -f file.csv print | hledger -f- print $ hledger -f file.csv print | hledger -f- print
Deduplicating, importing Deduplicating, importing
When you download a CSV file periodically, eg to get your latest bank When you download a CSV file periodically, eg to get your latest bank
transactions, the new file may overlap with the old one, containing transactions, the new file may overlap with the old one, containing
some of the same records. some of the same records.
The import command will (a) detect the new transactions, and (b) append The import command will (a) detect the new transactions, and (b) append
just those transactions to your main journal. It is idempotent, so you just those transactions to your main journal. It is idempotent, so you
don't have to remember how many times you ran it or with which version don't have to remember how many times you ran it or with which version
of the CSV. (It keeps state in a hidden .latest.FILE.csv file.) This of the CSV. (It keeps state in a hidden .latest.FILE.csv file.) This
is the easiest way to import CSV data. Eg: is the easiest way to import CSV data. Eg:
# download the latest CSV files, then run this command. # download the latest CSV files, then run this command.
# Note, no -f flags needed here. # Note, no -f flags needed here.
$ hledger import *.csv [--dry] $ hledger import *.csv [--dry]
This method works for most CSV files. (Where records have a stable This method works for most CSV files. (Where records have a stable
chronological order, and new records appear only at the new end.) chronological order, and new records appear only at the new end.)
A number of other tools and workflows, hledger-specific and otherwise, A number of other tools and workflows, hledger-specific and otherwise,
exist for converting, deduplicating, classifying and managing CSV data. exist for converting, deduplicating, classifying and managing CSV data.
See: See:
@ -780,30 +795,30 @@ TIPS
Setting amounts Setting amounts
A posting amount can be set in one of these ways: A posting amount can be set in one of these ways:
o by assigning (with a fields list or field assignment) to amountN o by assigning (with a fields list or field assignment) to amountN
(posting N's amount) or amount (posting 1's amount) (posting N's amount) or amount (posting 1's amount)
o by assigning to amountN-in and amountN-out (or amount-in and amount- o by assigning to amountN-in and amountN-out (or amount-in and amount-
out). For each CSV record, whichever of these has a non-zero value out). For each CSV record, whichever of these has a non-zero value
will be used, with appropriate sign. If both contain a non-zero will be used, with appropriate sign. If both contain a non-zero
value, this may not work. value, this may not work.
o by assigning to balanceN (or balance) instead of the above, setting o by assigning to balanceN (or balance) instead of the above, setting
the amount indirectly via a balance assignment. If you do this the the amount indirectly via a balance assignment. If you do this the
default account name may be wrong, so you should set that explicitly. default account name may be wrong, so you should set that explicitly.
There is some special handling for an amount's sign: There is some special handling for an amount's sign:
o If an amount value is parenthesised, it will be de-parenthesised and o If an amount value is parenthesised, it will be de-parenthesised and
sign-flipped. sign-flipped.
o If an amount value begins with a double minus sign, those cancel out o If an amount value begins with a double minus sign, those cancel out
and are removed. and are removed.
o If an amount value begins with a plus sign, that will be removed o If an amount value begins with a plus sign, that will be removed
Setting currency/commodity Setting currency/commodity
If the currency/commodity symbol is included in the CSV's amount If the currency/commodity symbol is included in the CSV's amount
field(s): field(s):
2020-01-01,foo,$123.00 2020-01-01,foo,$123.00
@ -822,7 +837,7 @@ TIPS
2020-01-01,foo,USD,123.00 2020-01-01,foo,USD,123.00
You can assign that to the currency pseudo-field, which has the special You can assign that to the currency pseudo-field, which has the special
effect of prepending itself to every amount in the transaction (on the effect of prepending itself to every amount in the transaction (on the
left, with no separating space): left, with no separating space):
fields date,description,currency,amount fields date,description,currency,amount
@ -831,7 +846,7 @@ TIPS
expenses:unknown USD123.00 expenses:unknown USD123.00
income:unknown USD-123.00 income:unknown USD-123.00
Or, you can use a field assignment to construct the amount yourself, Or, you can use a field assignment to construct the amount yourself,
with more control. Eg to put the symbol on the right, and separated by with more control. Eg to put the symbol on the right, and separated by
a space: a space:
@ -842,13 +857,13 @@ TIPS
expenses:unknown 123.00 USD expenses:unknown 123.00 USD
income:unknown -123.00 USD income:unknown -123.00 USD
Note we used a temporary field name (cur) that is not currency - that Note we used a temporary field name (cur) that is not currency - that
would trigger the prepending effect, which we don't want here. would trigger the prepending effect, which we don't want here.
Referencing other fields Referencing other fields
In field assignments, you can interpolate only CSV fields, not hledger In field assignments, you can interpolate only CSV fields, not hledger
fields. In the example below, there's both a CSV field and a hledger fields. In the example below, there's both a CSV field and a hledger
field named amount1, but %amount1 always means the CSV field, not the field named amount1, but %amount1 always means the CSV field, not the
hledger field: hledger field:
# Name the third CSV field "amount1" # Name the third CSV field "amount1"
@ -860,7 +875,7 @@ TIPS
# Set comment to the CSV amount1 (not the amount1 assigned above) # Set comment to the CSV amount1 (not the amount1 assigned above)
comment %amount1 comment %amount1
Here, since there's no CSV amount1 field, %amount1 will produce a lit- Here, since there's no CSV amount1 field, %amount1 will produce a lit-
eral "amount1": eral "amount1":
fields date,description,csvamount fields date,description,csvamount
@ -868,7 +883,7 @@ TIPS
# Can't interpolate amount1 here # Can't interpolate amount1 here
comment %amount1 comment %amount1
When there are multiple field assignments to the same hledger field, When there are multiple field assignments to the same hledger field,
only the last one takes effect. Here, comment's value will be be B, or only the last one takes effect. Here, comment's value will be be B, or
C if "something" is matched, but never A: C if "something" is matched, but never A:
@ -878,14 +893,14 @@ TIPS
comment C comment C
How CSV rules are evaluated How CSV rules are evaluated
Here's how to think of CSV rules being evaluated (if you really need Here's how to think of CSV rules being evaluated (if you really need
to). First, to). First,
o include - all includes are inlined, from top to bottom, depth first. o include - all includes are inlined, from top to bottom, depth first.
(At each include point the file is inlined and scanned for further (At each include point the file is inlined and scanned for further
includes, recursively, before proceeding.) includes, recursively, before proceeding.)
Then "global" rules are evaluated, top to bottom. If a rule is re- Then "global" rules are evaluated, top to bottom. If a rule is re-
peated, the last one wins: peated, the last one wins:
o skip (at top level) o skip (at top level)
@ -899,30 +914,30 @@ TIPS
Then for each CSV record in turn: Then for each CSV record in turn:
o test all if blocks. If any of them contain a end rule, skip all re- o test all if blocks. If any of them contain a end rule, skip all re-
maining CSV records. Otherwise if any of them contain a skip rule, maining CSV records. Otherwise if any of them contain a skip rule,
skip that many CSV records. If there are multiple matched skip skip that many CSV records. If there are multiple matched skip
rules, the first one wins. rules, the first one wins.
o collect all field assignments at top level and in matched if blocks. o collect all field assignments at top level and in matched if blocks.
When there are multiple assignments for a field, keep only the last When there are multiple assignments for a field, keep only the last
one. one.
o compute a value for each hledger field - either the one that was as- o compute a value for each hledger field - either the one that was as-
signed to it (and interpolate the %CSVFIELDNAME references), or a de- signed to it (and interpolate the %CSVFIELDNAME references), or a de-
fault fault
o generate a synthetic hledger transaction from these values. o generate a synthetic hledger transaction from these values.
This is all part of the CSV reader, one of several readers hledger can This is all part of the CSV reader, one of several readers hledger can
use to parse input files. When all files have been read successfully, use to parse input files. When all files have been read successfully,
the transactions are passed as input to whichever hledger command the the transactions are passed as input to whichever hledger command the
user specified. user specified.
REPORTING BUGS REPORTING BUGS
Report bugs at http://bugs.hledger.org (or on the #hledger IRC channel Report bugs at http://bugs.hledger.org (or on the #hledger IRC channel
or hledger mail list) or hledger mail list)
@ -936,7 +951,7 @@ COPYRIGHT
SEE ALSO SEE ALSO
hledger(1), hledger-ui(1), hledger-web(1), hledger-api(1), hledger(1), hledger-ui(1), hledger-web(1), hledger-api(1),
hledger_csv(5), hledger_journal(5), hledger_timeclock(5), hledger_time- hledger_csv(5), hledger_journal(5), hledger_timeclock(5), hledger_time-
dot(5), ledger(1) dot(5), ledger(1)

View File

@ -1588,10 +1588,12 @@ T}
If you want intervals that start on arbitrary day of your choosing and If you want intervals that start on arbitrary day of your choosing and
span a week, month or year, you need to use any of the following: span a week, month or year, you need to use any of the following:
.PP .PP
\f[C]every Nth day of week\f[R], \f[C]every <weekday>\f[R], \f[C]every Nth day of week\f[R], \f[C]every WEEKDAYNAME\f[R] (eg
\f[C]mon|tue|wed|thu|fri|sat|sun\f[R]),
\f[C]every Nth day [of month]\f[R], \f[C]every Nth day [of month]\f[R],
\f[C]every Nth weekday [of month]\f[R], \f[C]every MM/DD [of year]\f[R], \f[C]every Nth WEEKDAYNAME [of month]\f[R],
\f[C]every Nth MMM [of year]\f[R], \f[C]every MMM Nth [of year]\f[R]. \f[C]every MM/DD [of year]\f[R], \f[C]every Nth MMM [of year]\f[R],
\f[C]every MMM Nth [of year]\f[R].
.PP .PP
Examples: Examples:
.PP .PP
@ -2113,7 +2115,7 @@ Related: #329, #1083.
.PP .PP
.TS .TS
tab(@); tab(@);
lw(11.7n) lw(11.2n) lw(11.9n) lw(13.1n) lw(12.4n) lw(9.8n). lw(7.4n) lw(11.7n) lw(19.6n) lw(6.8n) lw(19.6n) lw(5.0n).
T{ T{
Report type Report type
T}@T{ T}@T{
@ -2258,15 +2260,35 @@ T}@T{
value at DATE/today of sums of postings value at DATE/today of sums of postings
T} T}
T{ T{
balances (with report interval) balances changes (with report interval)
T}@T{ T}@T{
sums of costs sums of costs of postings in interval
T}@T{ T}@T{
value at period ends of sums of postings value at period ends of sums of postings before period end minus value
at period starts of sums of all postings before period start
T}@T{ T}@T{
not supported not supported
T}@T{ T}@T{
value at period ends of sums of postings value at period ends of sums of postings before period end minus value
at period starts of sums of all postings before period start
T}@T{
value at DATE/today of sums of postings
T}
T{
end balances (with report interval and --cumulative or -H)
T}@T{
sums of costs of postings from report start (or before report start with
-H) and interval end
T}@T{
value at period ends of sums of all postings before period end (minus
value at report start of of sums of all postings before report start
with --cumulative)
T}@T{
not supported
T}@T{
value at period ends of sums of all postings before period end (minus
value at report start of of sums of all postings before report start
with --cumulative)
T}@T{ T}@T{
value at DATE/today of sums of postings value at DATE/today of sums of postings
T} T}
@ -2275,11 +2297,11 @@ starting balances (with report interval and -H)
T}@T{ T}@T{
sums of costs of postings before report start sums of costs of postings before report start
T}@T{ T}@T{
sums of postings before report start value at report start of sums of all postings before report start
T}@T{ T}@T{
not supported not supported
T}@T{ T}@T{
sums of postings before report start value at report start of sums of all postings before report start
T}@T{ T}@T{
sums of postings before report start sums of postings before report start
T} T}

View File

@ -1305,9 +1305,10 @@ end on the last one, as described above.
If you want intervals that start on arbitrary day of your choosing If you want intervals that start on arbitrary day of your choosing
and span a week, month or year, you need to use any of the following: and span a week, month or year, you need to use any of the following:
'every Nth day of week', 'every <weekday>', 'every Nth day [of 'every Nth day of week', 'every WEEKDAYNAME' (eg
month]', 'every Nth weekday [of month]', 'every MM/DD [of year]', 'every 'mon|tue|wed|thu|fri|sat|sun'), 'every Nth day [of month]', 'every Nth
Nth MMM [of year]', 'every MMM Nth [of year]'. WEEKDAYNAME [of month]', 'every MM/DD [of year]', 'every Nth MMM [of
year]', 'every MMM Nth [of year]'.
Examples: Examples:
@ -1785,76 +1786,103 @@ sideways.) It may be useful when troubleshooting. If you find
problems, please report them, ideally with a reproducible example. problems, please report them, ideally with a reproducible example.
Related: #329, #1083. Related: #329, #1083.
Report '-B', '-V', '-X' '--value=then' '--value=end' '--value=DATE', Report '-B', '-V', '-X' '--value=then''--value=end' '--value=DATE',
type '--value=cost' '--value=now' type '--value=cost' '--value=now'
------------------------------------------------------------------------------- ------------------------------------------------------------------------------
*print* *print*
posting cost value at value at value at value at posting cost value at report value value at report or value
amounts report end posting date report or DATE/today amounts end or today at journal end at
or today journal end posting DATE/today
balance unchanged unchanged unchanged unchanged unchanged date
balance unchanged unchanged unchangedunchanged unchanged
assertions assertions
/ /
assignments assignments
*register* *register*
starting cost value at not value at value at starting cost value at day not value at day value
balance day before supported day before DATE/today balance before report or supportedbefore report or at
(with -H) report or report or (with journal start journal start DATE/today
journal journal -H)
start start posting cost value at report value value at report or value
posting cost value at value at value at value at amounts end or today at journal end at
amounts report end posting date report or DATE/today (no posting DATE/today
(no report or today journal end report date
interval) interval)
summary summarised value at sum of value at value at summary summarised value at period sum value at period value
posting cost period postings in period ends DATE/today posting cost ends of ends at
amounts ends interval, amounts postings DATE/today
(with valued at (with in
report interval report interval,
interval) start interval) valued
running sum/average sum/average sum/average sum/average sum/average at
total/averageof of of displayed of of interval
displayed displayed values displayed displayed start
values values values values running sum/average sum/average of sum/averagesum/average of sum/average
total/averageof displayed values of displayed values of
displayed displayed displayed
values values values
*balance *balance
(bs, bse, (bs,
cf, is..)* bse,
balances sums of value at not value at value at cf,
(no report costs report end supported report or DATE/today is..)*
interval) or today journal end of sums balances sums of value at report not value at report or value
of sums of of sums of of (no costs end or today of supportedjournal end of at
postings postings postings report sums of postings sums of postings DATE/today
balances sums of value at not value at value at interval) of
(with costs period supported period ends DATE/today sums
report ends of of sums of of sums of
interval) sums of postings of postings
postings postings balances sums of value at period not value at period value
starting sums of sums of not sums of sums of changes costs of ends of sums of supportedends of sums of at
balances costs of postings supported postings postings (with postings postings before postings before DATE/today
(with postings before before before report in period end minus period end minus of
report before report report report interval)interval value at period value at period sums
interval report start start start starts of sums of starts of sums of of
and -H) start all postings all postings postings
budget like like not like like before period before period
amounts balances balances supported balances balances start start
end sums of value at period not value at period value
balances costs of ends of sums of supportedends of sums of at
(with postings all postings all postings DATE/today
report from before period end before period end of
interval report (minus value at (minus value at sums
and start (or report start of of report start of of of
-cumulativebefore sums of all sums of all postings
or -H) report postings before postings before
start with report start with report start with
-H) and -cumulative) -cumulative)
interval
end
starting sums of value at report not value at report sums
balances costs of start of sums of supportedstart of sums of of
(with postings all postings all postings postings
report before before report before report before
interval report start start report
and start start
-H)
budget like like balances not like balances like
amounts balances supported balances
with with
-budget -budget
grand sum of sum of not sum of sum of grand sum of sum of displayed not sum of displayed sum
total (no displayed displayed supported displayed displayed total displayed values supportedvalues of
report values values values values (no values displayed
report values
interval) interval)
row sums/averagessums/averagesnot sums/averages sums/averages row sums/averagessums/averages of not sums/averages of sums/averages
totals/averagesof of supported of of totals/averagesof displayed values supporteddisplayed values of
(with displayed displayed displayed displayed (with displayed displayed
report values values values values report values values
interval) interval)
column sums of sums of not sums of sums of column sums of sums of displayed not sums of displayed sums
totals displayed displayed supported displayed displayed totals displayed values supportedvalues of
values values values values values displayed
grand sum/average sum/average not sum/average sum/average values
total/averageof column of column supported of column of grand sum/average sum/average of not sum/average of sum/average
totals totals totals column total/averageof columncolumn totals supportedcolumn totals of
totals totals column
totals
*Glossary:* *Glossary:*
@ -4132,152 +4160,152 @@ Node: Report intervals40873
Ref: #report-intervals41038 Ref: #report-intervals41038
Node: Period expressions41428 Node: Period expressions41428
Ref: #period-expressions41588 Ref: #period-expressions41588
Node: Depth limiting45920 Node: Depth limiting45961
Ref: #depth-limiting46064 Ref: #depth-limiting46105
Node: Pivoting46396 Node: Pivoting46437
Ref: #pivoting46519 Ref: #pivoting46560
Node: Valuation48195 Node: Valuation48236
Ref: #valuation48297 Ref: #valuation48338
Node: -B Cost48986 Node: -B Cost49027
Ref: #b-cost49090 Ref: #b-cost49131
Node: -V Value49223 Node: -V Value49264
Ref: #v-value49369 Ref: #v-value49410
Node: -X Value in specified commodity49564 Node: -X Value in specified commodity49605
Ref: #x-value-in-specified-commodity49763 Ref: #x-value-in-specified-commodity49804
Node: Valuation date49912 Node: Valuation date49953
Ref: #valuation-date50080 Ref: #valuation-date50121
Node: Market prices50490 Node: Market prices50531
Ref: #market-prices50670 Ref: #market-prices50711
Node: --infer-value market prices from transactions51447 Node: --infer-value market prices from transactions51488
Ref: #infer-value-market-prices-from-transactions51696 Ref: #infer-value-market-prices-from-transactions51737
Node: Valuation commodity52978 Node: Valuation commodity53019
Ref: #valuation-commodity53187 Ref: #valuation-commodity53228
Node: Simple valuation examples54413 Node: Simple valuation examples54454
Ref: #simple-valuation-examples54615 Ref: #simple-valuation-examples54656
Node: --value Flexible valuation55274 Node: --value Flexible valuation55315
Ref: #value-flexible-valuation55482 Ref: #value-flexible-valuation55523
Node: More valuation examples57429 Node: More valuation examples57470
Ref: #more-valuation-examples57638 Ref: #more-valuation-examples57679
Node: Effect of valuation on reports59643 Node: Effect of valuation on reports59684
Ref: #effect-of-valuation-on-reports59831 Ref: #effect-of-valuation-on-reports59872
Node: COMMANDS65352 Node: COMMANDS67137
Ref: #commands65460 Ref: #commands67245
Node: accounts66568 Node: accounts68353
Ref: #accounts66666 Ref: #accounts68451
Node: activity67365 Node: activity69150
Ref: #activity67475 Ref: #activity69260
Node: add67858 Node: add69643
Ref: #add67959 Ref: #add69744
Node: aregister70752 Node: aregister72537
Ref: #aregister70864 Ref: #aregister72649
Node: aregister and custom posting dates72237 Node: aregister and custom posting dates74022
Ref: #aregister-and-custom-posting-dates72410 Ref: #aregister-and-custom-posting-dates74195
Ref: #output-format-173003 Ref: #output-format-174788
Node: balance73408 Node: balance75193
Ref: #balance73525 Ref: #balance75310
Node: Classic balance report75005 Node: Classic balance report76790
Ref: #classic-balance-report75178 Ref: #classic-balance-report76963
Node: Customising the classic balance report76502 Node: Customising the classic balance report78287
Ref: #customising-the-classic-balance-report76730 Ref: #customising-the-classic-balance-report78515
Node: Colour support78806 Node: Colour support80591
Ref: #colour-support78973 Ref: #colour-support80758
Node: Flat mode79069 Node: Flat mode80854
Ref: #flat-mode79217 Ref: #flat-mode81002
Node: Depth limited balance reports79630 Node: Depth limited balance reports81415
Ref: #depth-limited-balance-reports79815 Ref: #depth-limited-balance-reports81600
Node: Percentages80271 Node: Percentages82056
Ref: #percentages80428 Ref: #percentages82213
Node: Sorting by amount81565 Node: Sorting by amount83350
Ref: #sorting-by-amount81731 Ref: #sorting-by-amount83516
Node: Multicolumn balance report82225 Node: Multicolumn balance report84010
Ref: #multicolumn-balance-report82411 Ref: #multicolumn-balance-report84196
Node: Budget report88008 Node: Budget report89793
Ref: #budget-report88151 Ref: #budget-report89936
Node: Nested budgets93417 Node: Nested budgets95202
Ref: #nested-budgets93529 Ref: #nested-budgets95314
Ref: #output-format-297012 Ref: #output-format-298797
Node: balancesheet97209 Node: balancesheet98994
Ref: #balancesheet97345 Ref: #balancesheet99130
Node: balancesheetequity98857 Node: balancesheetequity100642
Ref: #balancesheetequity99006 Ref: #balancesheetequity100791
Node: cashflow100082 Node: cashflow101867
Ref: #cashflow100210 Ref: #cashflow101995
Node: check-dates101426 Node: check-dates103211
Ref: #check-dates101553 Ref: #check-dates103338
Node: check-dupes101832 Node: check-dupes103617
Ref: #check-dupes101958 Ref: #check-dupes103743
Node: close102251 Node: close104036
Ref: #close102359 Ref: #close104144
Node: close usage103881 Node: close usage105666
Ref: #close-usage103974 Ref: #close-usage105759
Node: codes106787 Node: codes108572
Ref: #codes106895 Ref: #codes108680
Node: commodities107607 Node: commodities109392
Ref: #commodities107734 Ref: #commodities109519
Node: descriptions107816 Node: descriptions109601
Ref: #descriptions107944 Ref: #descriptions109729
Node: diff108248 Node: diff110033
Ref: #diff108354 Ref: #diff110139
Node: files109401 Node: files111186
Ref: #files109501 Ref: #files111286
Node: help109648 Node: help111433
Ref: #help109748 Ref: #help111533
Node: import110829 Node: import112614
Ref: #import110943 Ref: #import112728
Node: Importing balance assignments111836 Node: Importing balance assignments113621
Ref: #importing-balance-assignments111984 Ref: #importing-balance-assignments113769
Node: incomestatement112633 Node: incomestatement114418
Ref: #incomestatement112766 Ref: #incomestatement114551
Node: notes114111 Node: notes115896
Ref: #notes114224 Ref: #notes116009
Node: payees114592 Node: payees116377
Ref: #payees114698 Ref: #payees116483
Node: prices115118 Node: prices116903
Ref: #prices115224 Ref: #prices117009
Node: print115565 Node: print117350
Ref: #print115675 Ref: #print117460
Node: print-unique120471 Node: print-unique122256
Ref: #print-unique120597 Ref: #print-unique122382
Node: register120882 Node: register122667
Ref: #register121009 Ref: #register122794
Node: Custom register output125458 Node: Custom register output127243
Ref: #custom-register-output125587 Ref: #custom-register-output127372
Node: register-match126924 Node: register-match128709
Ref: #register-match127058 Ref: #register-match128843
Node: rewrite127409 Node: rewrite129194
Ref: #rewrite127524 Ref: #rewrite129309
Node: Re-write rules in a file129379 Node: Re-write rules in a file131164
Ref: #re-write-rules-in-a-file129513 Ref: #re-write-rules-in-a-file131298
Node: Diff output format130723 Node: Diff output format132508
Ref: #diff-output-format130892 Ref: #diff-output-format132677
Node: rewrite vs print --auto131984 Node: rewrite vs print --auto133769
Ref: #rewrite-vs.-print---auto132163 Ref: #rewrite-vs.-print---auto133948
Node: roi132719 Node: roi134504
Ref: #roi132817 Ref: #roi134602
Node: stats133829 Node: stats135614
Ref: #stats133928 Ref: #stats135713
Node: tags134716 Node: tags136501
Ref: #tags134814 Ref: #tags136599
Node: test135333 Node: test137118
Ref: #test135441 Ref: #test137226
Node: Add-on commands136188 Node: Add-on commands137973
Ref: #add-on-commands136305 Ref: #add-on-commands138090
Node: ui137648 Node: ui139433
Ref: #ui137736 Ref: #ui139521
Node: web137790 Node: web139575
Ref: #web137893 Ref: #web139678
Node: iadd138009 Node: iadd139794
Ref: #iadd138120 Ref: #iadd139905
Node: interest138202 Node: interest139987
Ref: #interest138309 Ref: #interest140094
Node: ENVIRONMENT138549 Node: ENVIRONMENT140334
Ref: #environment138661 Ref: #environment140446
Node: FILES139646 Node: FILES141431
Ref: #files-1139749 Ref: #files-1141534
Node: LIMITATIONS139962 Node: LIMITATIONS141747
Ref: #limitations140081 Ref: #limitations141866
Node: TROUBLESHOOTING140823 Node: TROUBLESHOOTING142608
Ref: #troubleshooting140936 Ref: #troubleshooting142721
 
End Tag Table End Tag Table

File diff suppressed because it is too large Load Diff