;update manuals
This commit is contained in:
parent
7cf7bcbf96
commit
895783ebe0
@ -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.
|
||||||
|
|||||||
@ -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
|
||||||
|
|
||||||
|
|||||||
@ -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)
|
||||||
|
|
||||||
|
|||||||
@ -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}
|
||||||
|
|||||||
@ -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
|
||||||
|
|
||||||
|
|||||||
1041
hledger/hledger.txt
1041
hledger/hledger.txt
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user