cli: import command! hledger import *.csv adds new txns to main file
This commit is contained in:
parent
0720cf9341
commit
7edacdf443
@ -284,7 +284,7 @@ readJournalFileWithOpts iopts prefixedfile = do
|
|||||||
Right j | new_ iopts -> do
|
Right j | new_ iopts -> do
|
||||||
ds <- previousLatestDates f
|
ds <- previousLatestDates f
|
||||||
let (newj, newds) = journalFilterSinceLatestDates ds j
|
let (newj, newds) = journalFilterSinceLatestDates ds j
|
||||||
when (not $ null newds) $ saveLatestDates newds f
|
when (new_save_ iopts && not (null newds)) $ saveLatestDates newds f
|
||||||
return $ Right newj
|
return $ Right newj
|
||||||
Right j -> return $ Right j
|
Right j -> return $ Right j
|
||||||
|
|
||||||
|
|||||||
@ -56,13 +56,14 @@ data InputOpts = InputOpts {
|
|||||||
,anon_ :: Bool -- ^ do light anonymisation/obfuscation of the data
|
,anon_ :: Bool -- ^ do light anonymisation/obfuscation of the data
|
||||||
,ignore_assertions_ :: Bool -- ^ don't check balance assertions
|
,ignore_assertions_ :: Bool -- ^ don't check balance assertions
|
||||||
,new_ :: Bool -- ^ read only new transactions since this file was last read
|
,new_ :: Bool -- ^ read only new transactions since this file was last read
|
||||||
|
,new_save_ :: Bool -- ^ save latest new transactions state for next time
|
||||||
,pivot_ :: String -- ^ use the given field's value as the account name
|
,pivot_ :: String -- ^ use the given field's value as the account name
|
||||||
} deriving (Show, Data) --, Typeable)
|
} deriving (Show, Data) --, Typeable)
|
||||||
|
|
||||||
instance Default InputOpts where def = definputopts
|
instance Default InputOpts where def = definputopts
|
||||||
|
|
||||||
definputopts :: InputOpts
|
definputopts :: InputOpts
|
||||||
definputopts = InputOpts def def def def def def def
|
definputopts = InputOpts def def def def def def True def
|
||||||
|
|
||||||
rawOptsToInputOpts :: RawOpts -> InputOpts
|
rawOptsToInputOpts :: RawOpts -> InputOpts
|
||||||
rawOptsToInputOpts rawopts = InputOpts{
|
rawOptsToInputOpts rawopts = InputOpts{
|
||||||
@ -73,6 +74,7 @@ rawOptsToInputOpts rawopts = InputOpts{
|
|||||||
,anon_ = boolopt "anon" rawopts
|
,anon_ = boolopt "anon" rawopts
|
||||||
,ignore_assertions_ = boolopt "ignore-assertions" rawopts
|
,ignore_assertions_ = boolopt "ignore-assertions" rawopts
|
||||||
,new_ = boolopt "new" rawopts
|
,new_ = boolopt "new" rawopts
|
||||||
|
,new_save_ = True
|
||||||
,pivot_ = stringopt "pivot" rawopts
|
,pivot_ = stringopt "pivot" rawopts
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -247,6 +247,13 @@ If the CSV includes a running balance, you can assign that to the
|
|||||||
\f[C]balance\f[] pseudo field; whenever the running balance value is
|
\f[C]balance\f[] pseudo field; whenever the running balance value is
|
||||||
non\-empty, it will be asserted as the balance after the
|
non\-empty, it will be asserted as the balance after the
|
||||||
\f[C]account1\f[] posting.
|
\f[C]account1\f[] posting.
|
||||||
|
.SS Reading multiple CSV files
|
||||||
|
.PP
|
||||||
|
You can read multiple CSV files at once using multiple \f[C]\-f\f[]
|
||||||
|
arguments on the command line, and hledger will look for a
|
||||||
|
correspondingly\-named rules file for each.
|
||||||
|
Note if you use the \f[C]\-\-rules\-file\f[] option, this one rules file
|
||||||
|
will be used for all the CSV files being read.
|
||||||
|
|
||||||
|
|
||||||
.SH "REPORTING BUGS"
|
.SH "REPORTING BUGS"
|
||||||
|
|||||||
@ -198,6 +198,7 @@ File: hledger_csv.5.info, Node: CSV TIPS, Prev: CSV RULES, Up: Top
|
|||||||
* CSV accounts::
|
* CSV accounts::
|
||||||
* CSV amounts::
|
* CSV amounts::
|
||||||
* CSV balance assertions::
|
* CSV balance assertions::
|
||||||
|
* Reading multiple CSV files::
|
||||||
|
|
||||||
|
|
||||||
File: hledger_csv.5.info, Node: CSV ordering, Next: CSV accounts, Up: CSV TIPS
|
File: hledger_csv.5.info, Node: CSV ordering, Next: CSV accounts, Up: CSV TIPS
|
||||||
@ -246,7 +247,7 @@ fields (giving more control, eg to put the currency symbol on the
|
|||||||
right).
|
right).
|
||||||
|
|
||||||
|
|
||||||
File: hledger_csv.5.info, Node: CSV balance assertions, Prev: CSV amounts, Up: CSV TIPS
|
File: hledger_csv.5.info, Node: CSV balance assertions, Next: Reading multiple CSV files, Prev: CSV amounts, Up: CSV TIPS
|
||||||
|
|
||||||
2.4 CSV balance assertions
|
2.4 CSV balance assertions
|
||||||
==========================
|
==========================
|
||||||
@ -255,6 +256,17 @@ If the CSV includes a running balance, you can assign that to the
|
|||||||
'balance' pseudo field; whenever the running balance value is non-empty,
|
'balance' pseudo field; whenever the running balance value is non-empty,
|
||||||
it will be asserted as the balance after the 'account1' posting.
|
it will be asserted as the balance after the 'account1' posting.
|
||||||
|
|
||||||
|
|
||||||
|
File: hledger_csv.5.info, Node: Reading multiple CSV files, Prev: CSV balance assertions, Up: CSV TIPS
|
||||||
|
|
||||||
|
2.5 Reading multiple CSV files
|
||||||
|
==============================
|
||||||
|
|
||||||
|
You can read multiple CSV files at once using multiple '-f' arguments on
|
||||||
|
the command line, and hledger will look for a correspondingly-named
|
||||||
|
rules file for each. Note if you use the '--rules-file' option, this
|
||||||
|
one rules file will be used for all the CSV files being read.
|
||||||
|
|
||||||
|
|
||||||
Tag Table:
|
Tag Table:
|
||||||
Node: Top74
|
Node: Top74
|
||||||
@ -276,13 +288,15 @@ Node: newest-first5011
|
|||||||
Ref: #newest-first5127
|
Ref: #newest-first5127
|
||||||
Node: CSV TIPS5538
|
Node: CSV TIPS5538
|
||||||
Ref: #csv-tips5634
|
Ref: #csv-tips5634
|
||||||
Node: CSV ordering5721
|
Node: CSV ordering5752
|
||||||
Ref: #csv-ordering5841
|
Ref: #csv-ordering5872
|
||||||
Node: CSV accounts6022
|
Node: CSV accounts6053
|
||||||
Ref: #csv-accounts6162
|
Ref: #csv-accounts6193
|
||||||
Node: CSV amounts6416
|
Node: CSV amounts6447
|
||||||
Ref: #csv-amounts6564
|
Ref: #csv-amounts6595
|
||||||
Node: CSV balance assertions7339
|
Node: CSV balance assertions7370
|
||||||
Ref: #csv-balance-assertions7488
|
Ref: #csv-balance-assertions7554
|
||||||
|
Node: Reading multiple CSV files7759
|
||||||
|
Ref: #reading-multiple-csv-files7931
|
||||||
|
|
||||||
End Tag Table
|
End Tag Table
|
||||||
|
|||||||
@ -169,10 +169,16 @@ CSV TIPS
|
|||||||
ance pseudo field; whenever the running balance value is non-empty, it
|
ance pseudo field; whenever the running balance value is non-empty, it
|
||||||
will be asserted as the balance after the account1 posting.
|
will be asserted as the balance after the account1 posting.
|
||||||
|
|
||||||
|
Reading multiple CSV files
|
||||||
|
You can read multiple CSV files at once using multiple -f arguments on
|
||||||
|
the command line, and hledger will look for a correspondingly-named
|
||||||
|
rules file for each. Note if you use the --rules-file option, this one
|
||||||
|
rules file will be used for all the CSV files being read.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
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)
|
||||||
|
|
||||||
|
|
||||||
@ -186,7 +192,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)
|
||||||
|
|
||||||
|
|||||||
@ -22,6 +22,7 @@ module Hledger.Cli.Commands (
|
|||||||
,module Hledger.Cli.Commands.Checkdupes
|
,module Hledger.Cli.Commands.Checkdupes
|
||||||
,module Hledger.Cli.Commands.Equity
|
,module Hledger.Cli.Commands.Equity
|
||||||
,module Hledger.Cli.Commands.Help
|
,module Hledger.Cli.Commands.Help
|
||||||
|
,module Hledger.Cli.Commands.Import
|
||||||
,module Hledger.Cli.Commands.Incomestatement
|
,module Hledger.Cli.Commands.Incomestatement
|
||||||
,module Hledger.Cli.Commands.Prices
|
,module Hledger.Cli.Commands.Prices
|
||||||
,module Hledger.Cli.Commands.Print
|
,module Hledger.Cli.Commands.Print
|
||||||
@ -60,6 +61,7 @@ import Hledger.Cli.Commands.Checkdates
|
|||||||
import Hledger.Cli.Commands.Checkdupes
|
import Hledger.Cli.Commands.Checkdupes
|
||||||
import Hledger.Cli.Commands.Equity
|
import Hledger.Cli.Commands.Equity
|
||||||
import Hledger.Cli.Commands.Help
|
import Hledger.Cli.Commands.Help
|
||||||
|
import Hledger.Cli.Commands.Import
|
||||||
import Hledger.Cli.Commands.Incomestatement
|
import Hledger.Cli.Commands.Incomestatement
|
||||||
import Hledger.Cli.Commands.Prices
|
import Hledger.Cli.Commands.Prices
|
||||||
import Hledger.Cli.Commands.Print
|
import Hledger.Cli.Commands.Print
|
||||||
@ -86,6 +88,7 @@ builtinCommands = [
|
|||||||
,(checkdupesmode , checkdupes)
|
,(checkdupesmode , checkdupes)
|
||||||
,(equitymode , equity)
|
,(equitymode , equity)
|
||||||
,(helpmode , help')
|
,(helpmode , help')
|
||||||
|
,(importmode , importcmd)
|
||||||
,(incomestatementmode , incomestatement)
|
,(incomestatementmode , incomestatement)
|
||||||
,(pricesmode , prices)
|
,(pricesmode , prices)
|
||||||
,(printmode , print')
|
,(printmode , print')
|
||||||
|
|||||||
58
hledger/Hledger/Cli/Commands/Import.hs
Executable file
58
hledger/Hledger/Cli/Commands/Import.hs
Executable file
@ -0,0 +1,58 @@
|
|||||||
|
{-# LANGUAGE OverloadedStrings #-}
|
||||||
|
{-# LANGUAGE QuasiQuotes #-}
|
||||||
|
|
||||||
|
module Hledger.Cli.Commands.Import (
|
||||||
|
importmode
|
||||||
|
,importcmd
|
||||||
|
)
|
||||||
|
where
|
||||||
|
|
||||||
|
import Control.Monad
|
||||||
|
import Data.String.Here
|
||||||
|
import Hledger
|
||||||
|
import Hledger.Cli.CliOptions
|
||||||
|
import Hledger.Cli.Commands.Add (journalAddTransaction)
|
||||||
|
-- import Hledger.Cli.Commands.Print (print')
|
||||||
|
import System.Console.CmdArgs.Explicit
|
||||||
|
import Text.Printf
|
||||||
|
|
||||||
|
importmode = hledgerCommandMode
|
||||||
|
[here| import
|
||||||
|
Read new transactions added to each FILE since last run, and add them to
|
||||||
|
the main journal file. Or with --dry-run, just print the transactions
|
||||||
|
that would be added.
|
||||||
|
|
||||||
|
Input files are provided as arguments, or glob patterns. So eg to add new
|
||||||
|
transactions from all CSV files to the main journal: hledger import *.csv
|
||||||
|
|
||||||
|
New transactions are detected like print --new (using .latest.FILE state files)
|
||||||
|
|
||||||
|
FLAGS
|
||||||
|
|]
|
||||||
|
[flagNone ["dry-run"] (\opts -> setboolopt "dry-run" opts) "just show the transactions to be imported"]
|
||||||
|
[generalflagsgroup1]
|
||||||
|
[]
|
||||||
|
([], Just $ argsFlag "FILE [...]")
|
||||||
|
|
||||||
|
importcmd opts@CliOpts{rawopts_=rawopts,inputopts_=iopts} j = do
|
||||||
|
let
|
||||||
|
inputfiles = listofstringopt "args" rawopts
|
||||||
|
dryrun = boolopt "dry-run" rawopts
|
||||||
|
iopts' = iopts{new_=True, new_save_=not dryrun}
|
||||||
|
case inputfiles of
|
||||||
|
[] -> error' "please provide one or more input files as arguments"
|
||||||
|
fs -> do
|
||||||
|
enewj <- readJournalFilesWithOpts iopts' fs
|
||||||
|
case enewj of
|
||||||
|
Left e -> error' e
|
||||||
|
Right newj ->
|
||||||
|
case jtxns newj of
|
||||||
|
[] -> putStrLn "no new transactions"
|
||||||
|
newts | dryrun -> do
|
||||||
|
printf "would import %d new transactions:\n\n" (length newts)
|
||||||
|
-- TODO how to force output here ?
|
||||||
|
-- length (jtxns newj) `seq` print' opts{rawopts_=("explicit",""):rawopts} newj
|
||||||
|
mapM_ (putStr . showTransactionUnelided) newts
|
||||||
|
newts -> do
|
||||||
|
foldM (flip journalAddTransaction opts) j newts -- gets forced somehow.. (how ?)
|
||||||
|
printf "imported %d new transactions\n" (length newts)
|
||||||
@ -388,6 +388,19 @@ DESCRIPTION
|
|||||||
...
|
...
|
||||||
}})
|
}})
|
||||||
|
|
||||||
|
## import
|
||||||
|
Read new transactions added to each FILE since last run, and add them to
|
||||||
|
the main journal file.
|
||||||
|
|
||||||
|
`--dry-run`
|
||||||
|
: just show the transactions to be imported
|
||||||
|
|
||||||
|
Input files are provided as arguments, or glob patterns. So eg to add new
|
||||||
|
transactions from all CSV files to the main journal: hledger import *.csv
|
||||||
|
|
||||||
|
New transactions are detected like print --new (using .latest.FILE state files).
|
||||||
|
|
||||||
|
|
||||||
## incomestatement
|
## incomestatement
|
||||||
Show an income statement. Alias: is.
|
Show an income statement. Alias: is.
|
||||||
|
|
||||||
@ -525,7 +538,7 @@ one whose description is most similar to STR, and is most recent. STR should con
|
|||||||
least two characters. If there is no similar-enough match, no transaction will be shown.
|
least two characters. If there is no similar-enough match, no transaction will be shown.
|
||||||
|
|
||||||
With `--new`, for each FILE being read, hledger reads (and writes) a special
|
With `--new`, for each FILE being read, hledger reads (and writes) a special
|
||||||
.latest.FILE file in the same directory, containing the latest transaction date(s)
|
state file (`.latest.FILE` in the same directory), containing the latest transaction date(s)
|
||||||
that were seen last time FILE was read. When this file is found, only transactions
|
that were seen last time FILE was read. When this file is found, only transactions
|
||||||
with newer dates (and new transactions on the latest date) are printed.
|
with newer dates (and new transactions on the latest date) are printed.
|
||||||
This is useful for ignoring already-seen entries in import data, such as downloaded CSV files.
|
This is useful for ignoring already-seen entries in import data, such as downloaded CSV files.
|
||||||
@ -536,6 +549,7 @@ $ hledger -f bank1.csv print --new
|
|||||||
```
|
```
|
||||||
This assumes that transactions added to FILE always have same or increasing dates,
|
This assumes that transactions added to FILE always have same or increasing dates,
|
||||||
and that transactions on the same day do not get reordered.
|
and that transactions on the same day do not get reordered.
|
||||||
|
See also the [import](#import) command.
|
||||||
|
|
||||||
The print command also supports
|
The print command also supports
|
||||||
[output destination](#output-destination)
|
[output destination](#output-destination)
|
||||||
|
|||||||
@ -1951,6 +1951,22 @@ DESCRIPTION
|
|||||||
\&...
|
\&...
|
||||||
\f[]
|
\f[]
|
||||||
.fi
|
.fi
|
||||||
|
.SS import
|
||||||
|
.PP
|
||||||
|
Read new transactions added to each FILE since last run, and add them to
|
||||||
|
the main journal file.
|
||||||
|
.TP
|
||||||
|
.B \f[C]\-\-dry\-run\f[]
|
||||||
|
just show the transactions to be imported
|
||||||
|
.RS
|
||||||
|
.RE
|
||||||
|
.PP
|
||||||
|
Input files are provided as arguments, or glob patterns.
|
||||||
|
So eg to add new transactions from all CSV files to the main journal:
|
||||||
|
hledger import *.csv
|
||||||
|
.PP
|
||||||
|
New transactions are detected like print \-\-new (using .latest.FILE
|
||||||
|
state files).
|
||||||
.SS incomestatement
|
.SS incomestatement
|
||||||
.PP
|
.PP
|
||||||
Show an income statement.
|
Show an income statement.
|
||||||
@ -2140,8 +2156,9 @@ STR should contain at least two characters.
|
|||||||
If there is no similar\-enough match, no transaction will be shown.
|
If there is no similar\-enough match, no transaction will be shown.
|
||||||
.PP
|
.PP
|
||||||
With \f[C]\-\-new\f[], for each FILE being read, hledger reads (and
|
With \f[C]\-\-new\f[], for each FILE being read, hledger reads (and
|
||||||
writes) a special .latest.FILE file in the same directory, containing
|
writes) a special state file (\f[C]\&.latest.FILE\f[] in the same
|
||||||
the latest transaction date(s) that were seen last time FILE was read.
|
directory), containing the latest transaction date(s) that were seen
|
||||||
|
last time FILE was read.
|
||||||
When this file is found, only transactions with newer dates (and new
|
When this file is found, only transactions with newer dates (and new
|
||||||
transactions on the latest date) are printed.
|
transactions on the latest date) are printed.
|
||||||
This is useful for ignoring already\-seen entries in import data, such
|
This is useful for ignoring already\-seen entries in import data, such
|
||||||
@ -2158,6 +2175,7 @@ $\ hledger\ \-f\ bank1.csv\ print\ \-\-new
|
|||||||
This assumes that transactions added to FILE always have same or
|
This assumes that transactions added to FILE always have same or
|
||||||
increasing dates, and that transactions on the same day do not get
|
increasing dates, and that transactions on the same day do not get
|
||||||
reordered.
|
reordered.
|
||||||
|
See also the import command.
|
||||||
.PP
|
.PP
|
||||||
The print command also supports output destination and CSV output.
|
The print command also supports output destination and CSV output.
|
||||||
Here\[aq]s an example of print\[aq]s CSV output:
|
Here\[aq]s an example of print\[aq]s CSV output:
|
||||||
|
|||||||
@ -800,6 +800,7 @@ detailed command help.
|
|||||||
* check-dupes::
|
* check-dupes::
|
||||||
* equity::
|
* equity::
|
||||||
* help::
|
* help::
|
||||||
|
* import::
|
||||||
* incomestatement::
|
* incomestatement::
|
||||||
* prices::
|
* prices::
|
||||||
* print::
|
* print::
|
||||||
@ -1520,7 +1521,7 @@ balances to zero and back. Can be useful for bringing account balances
|
|||||||
across file boundaries.
|
across file boundaries.
|
||||||
|
|
||||||
|
|
||||||
File: hledger.1.info, Node: help, Next: incomestatement, Prev: equity, Up: COMMANDS
|
File: hledger.1.info, Node: help, Next: import, Prev: equity, Up: COMMANDS
|
||||||
|
|
||||||
4.11 help
|
4.11 help
|
||||||
=========
|
=========
|
||||||
@ -1557,9 +1558,29 @@ DESCRIPTION
|
|||||||
...
|
...
|
||||||
|
|
||||||
|
|
||||||
File: hledger.1.info, Node: incomestatement, Next: prices, Prev: help, Up: COMMANDS
|
File: hledger.1.info, Node: import, Next: incomestatement, Prev: help, Up: COMMANDS
|
||||||
|
|
||||||
4.12 incomestatement
|
4.12 import
|
||||||
|
===========
|
||||||
|
|
||||||
|
Read new transactions added to each FILE since last run, and add them to
|
||||||
|
the main journal file.
|
||||||
|
|
||||||
|
'--dry-run'
|
||||||
|
|
||||||
|
just show the transactions to be imported
|
||||||
|
|
||||||
|
Input files are provided as arguments, or glob patterns. So eg to
|
||||||
|
add new transactions from all CSV files to the main journal: hledger
|
||||||
|
import *.csv
|
||||||
|
|
||||||
|
New transactions are detected like print -new (using .latest.FILE
|
||||||
|
state files).
|
||||||
|
|
||||||
|
|
||||||
|
File: hledger.1.info, Node: incomestatement, Next: prices, Prev: import, Up: COMMANDS
|
||||||
|
|
||||||
|
4.13 incomestatement
|
||||||
====================
|
====================
|
||||||
|
|
||||||
Show an income statement. Alias: is.
|
Show an income statement. Alias: is.
|
||||||
@ -1635,7 +1656,7 @@ report mode with '--change'/'--cumulative'/'--historical'.
|
|||||||
|
|
||||||
File: hledger.1.info, Node: prices, Next: print, Prev: incomestatement, Up: COMMANDS
|
File: hledger.1.info, Node: prices, Next: print, Prev: incomestatement, Up: COMMANDS
|
||||||
|
|
||||||
4.13 prices
|
4.14 prices
|
||||||
===========
|
===========
|
||||||
|
|
||||||
Print all market prices from the journal.
|
Print all market prices from the journal.
|
||||||
@ -1643,7 +1664,7 @@ Print all market prices from the journal.
|
|||||||
|
|
||||||
File: hledger.1.info, Node: print, Next: print-unique, Prev: prices, Up: COMMANDS
|
File: hledger.1.info, Node: print, Next: print-unique, Prev: prices, Up: COMMANDS
|
||||||
|
|
||||||
4.14 print
|
4.15 print
|
||||||
==========
|
==========
|
||||||
|
|
||||||
Show transactions from the journal. Aliases: p, txns.
|
Show transactions from the journal. Aliases: p, txns.
|
||||||
@ -1713,18 +1734,19 @@ is most recent. STR should contain at least two characters. If there
|
|||||||
is no similar-enough match, no transaction will be shown.
|
is no similar-enough match, no transaction will be shown.
|
||||||
|
|
||||||
With '--new', for each FILE being read, hledger reads (and writes) a
|
With '--new', for each FILE being read, hledger reads (and writes) a
|
||||||
special .latest.FILE file in the same directory, containing the latest
|
special state file ('.latest.FILE' in the same directory), containing
|
||||||
transaction date(s) that were seen last time FILE was read. When this
|
the latest transaction date(s) that were seen last time FILE was read.
|
||||||
file is found, only transactions with newer dates (and new transactions
|
When this file is found, only transactions with newer dates (and new
|
||||||
on the latest date) are printed. This is useful for ignoring
|
transactions on the latest date) are printed. This is useful for
|
||||||
already-seen entries in import data, such as downloaded CSV files. Eg:
|
ignoring already-seen entries in import data, such as downloaded CSV
|
||||||
|
files. Eg:
|
||||||
|
|
||||||
$ hledger -f bank1.csv print --new
|
$ hledger -f bank1.csv print --new
|
||||||
# shows transactions added since last print --new on this file
|
# shows transactions added since last print --new on this file
|
||||||
|
|
||||||
This assumes that transactions added to FILE always have same or
|
This assumes that transactions added to FILE always have same or
|
||||||
increasing dates, and that transactions on the same day do not get
|
increasing dates, and that transactions on the same day do not get
|
||||||
reordered.
|
reordered. See also the import command.
|
||||||
|
|
||||||
The print command also supports output destination and CSV output.
|
The print command also supports output destination and CSV output.
|
||||||
Here's an example of print's CSV output:
|
Here's an example of print's CSV output:
|
||||||
@ -1759,7 +1781,7 @@ $ hledger print -Ocsv
|
|||||||
|
|
||||||
File: hledger.1.info, Node: print-unique, Next: register, Prev: print, Up: COMMANDS
|
File: hledger.1.info, Node: print-unique, Next: register, Prev: print, Up: COMMANDS
|
||||||
|
|
||||||
4.15 print-unique
|
4.16 print-unique
|
||||||
=================
|
=================
|
||||||
|
|
||||||
Print transactions which do not reuse an already-seen description.
|
Print transactions which do not reuse an already-seen description.
|
||||||
@ -1767,7 +1789,7 @@ Print transactions which do not reuse an already-seen description.
|
|||||||
|
|
||||||
File: hledger.1.info, Node: register, Next: register-match, Prev: print-unique, Up: COMMANDS
|
File: hledger.1.info, Node: register, Next: register-match, Prev: print-unique, Up: COMMANDS
|
||||||
|
|
||||||
4.16 register
|
4.17 register
|
||||||
=============
|
=============
|
||||||
|
|
||||||
Show postings and their running total. Aliases: r, reg.
|
Show postings and their running total. Aliases: r, reg.
|
||||||
@ -1872,7 +1894,7 @@ length and comparable to the others in the report.
|
|||||||
|
|
||||||
File: hledger.1.info, Node: Custom register output, Up: register
|
File: hledger.1.info, Node: Custom register output, Up: register
|
||||||
|
|
||||||
4.16.1 Custom register output
|
4.17.1 Custom register output
|
||||||
-----------------------------
|
-----------------------------
|
||||||
|
|
||||||
register uses the full terminal width by default, except on windows.
|
register uses the full terminal width by default, except on windows.
|
||||||
@ -1904,7 +1926,7 @@ output.
|
|||||||
|
|
||||||
File: hledger.1.info, Node: register-match, Next: rewrite, Prev: register, Up: COMMANDS
|
File: hledger.1.info, Node: register-match, Next: rewrite, Prev: register, Up: COMMANDS
|
||||||
|
|
||||||
4.17 register-match
|
4.18 register-match
|
||||||
===================
|
===================
|
||||||
|
|
||||||
Print the one posting whose transaction description is closest to DESC,
|
Print the one posting whose transaction description is closest to DESC,
|
||||||
@ -1914,7 +1936,7 @@ already-seen transactions when importing.
|
|||||||
|
|
||||||
File: hledger.1.info, Node: rewrite, Next: stats, Prev: register-match, Up: COMMANDS
|
File: hledger.1.info, Node: rewrite, Next: stats, Prev: register-match, Up: COMMANDS
|
||||||
|
|
||||||
4.18 rewrite
|
4.19 rewrite
|
||||||
============
|
============
|
||||||
|
|
||||||
Print all transactions, adding custom postings to the matched ones.
|
Print all transactions, adding custom postings to the matched ones.
|
||||||
@ -1922,7 +1944,7 @@ Print all transactions, adding custom postings to the matched ones.
|
|||||||
|
|
||||||
File: hledger.1.info, Node: stats, Next: tags, Prev: rewrite, Up: COMMANDS
|
File: hledger.1.info, Node: stats, Next: tags, Prev: rewrite, Up: COMMANDS
|
||||||
|
|
||||||
4.19 stats
|
4.20 stats
|
||||||
==========
|
==========
|
||||||
|
|
||||||
Show some journal statistics.
|
Show some journal statistics.
|
||||||
@ -1954,7 +1976,7 @@ output destination.
|
|||||||
|
|
||||||
File: hledger.1.info, Node: tags, Next: test, Prev: stats, Up: COMMANDS
|
File: hledger.1.info, Node: tags, Next: test, Prev: stats, Up: COMMANDS
|
||||||
|
|
||||||
4.20 tags
|
4.21 tags
|
||||||
=========
|
=========
|
||||||
|
|
||||||
List all the tag names in use.
|
List all the tag names in use.
|
||||||
@ -1962,7 +1984,7 @@ List all the tag names in use.
|
|||||||
|
|
||||||
File: hledger.1.info, Node: test, Prev: tags, Up: COMMANDS
|
File: hledger.1.info, Node: test, Prev: tags, Up: COMMANDS
|
||||||
|
|
||||||
4.21 test
|
4.22 test
|
||||||
=========
|
=========
|
||||||
|
|
||||||
Run built-in unit tests.
|
Run built-in unit tests.
|
||||||
@ -2192,93 +2214,95 @@ Node: QUERIES21498
|
|||||||
Ref: #queries21602
|
Ref: #queries21602
|
||||||
Node: COMMANDS25569
|
Node: COMMANDS25569
|
||||||
Ref: #commands25683
|
Ref: #commands25683
|
||||||
Node: accounts26655
|
Node: accounts26666
|
||||||
Ref: #accounts26755
|
Ref: #accounts26766
|
||||||
Node: activity27748
|
Node: activity27759
|
||||||
Ref: #activity27860
|
Ref: #activity27871
|
||||||
Node: add28219
|
Node: add28230
|
||||||
Ref: #add28320
|
Ref: #add28331
|
||||||
Node: balance30978
|
Node: balance30989
|
||||||
Ref: #balance31091
|
Ref: #balance31102
|
||||||
Node: Flat mode34111
|
Node: Flat mode34122
|
||||||
Ref: #flat-mode34238
|
Ref: #flat-mode34249
|
||||||
Node: Depth limited balance reports34658
|
Node: Depth limited balance reports34669
|
||||||
Ref: #depth-limited-balance-reports34861
|
Ref: #depth-limited-balance-reports34872
|
||||||
Node: Multicolumn balance reports35281
|
Node: Multicolumn balance reports35292
|
||||||
Ref: #multicolumn-balance-reports35492
|
Ref: #multicolumn-balance-reports35503
|
||||||
Node: Custom balance output40140
|
Node: Custom balance output40151
|
||||||
Ref: #custom-balance-output40324
|
Ref: #custom-balance-output40335
|
||||||
Node: Colour support42417
|
Node: Colour support42428
|
||||||
Ref: #colour-support42578
|
Ref: #colour-support42589
|
||||||
Node: Output destination42751
|
Node: Output destination42762
|
||||||
Ref: #output-destination42909
|
Ref: #output-destination42920
|
||||||
Node: CSV output43179
|
Node: CSV output43190
|
||||||
Ref: #csv-output43298
|
Ref: #csv-output43309
|
||||||
Node: balancesheet43695
|
Node: balancesheet43706
|
||||||
Ref: #balancesheet43833
|
Ref: #balancesheet43844
|
||||||
Node: balancesheetequity45740
|
Node: balancesheetequity45751
|
||||||
Ref: #balancesheetequity45891
|
Ref: #balancesheetequity45902
|
||||||
Node: cashflow46680
|
Node: cashflow46691
|
||||||
Ref: #cashflow46810
|
Ref: #cashflow46821
|
||||||
Node: check-dates48661
|
Node: check-dates48672
|
||||||
Ref: #check-dates48790
|
Ref: #check-dates48801
|
||||||
Node: check-dupes48907
|
Node: check-dupes48918
|
||||||
Ref: #check-dupes49034
|
Ref: #check-dupes49045
|
||||||
Node: equity49171
|
Node: equity49182
|
||||||
Ref: #equity49283
|
Ref: #equity49294
|
||||||
Node: help49446
|
Node: help49457
|
||||||
Ref: #help49558
|
Ref: #help49560
|
||||||
Node: incomestatement50632
|
Node: import50634
|
||||||
Ref: #incomestatement50766
|
Ref: #import50750
|
||||||
Node: prices52658
|
Node: incomestatement51145
|
||||||
Ref: #prices52775
|
Ref: #incomestatement51281
|
||||||
Node: print52818
|
Node: prices53173
|
||||||
Ref: #print52930
|
Ref: #prices53290
|
||||||
Node: print-unique57737
|
Node: print53333
|
||||||
Ref: #print-unique57865
|
Ref: #print53445
|
||||||
Node: register57933
|
Node: print-unique58291
|
||||||
Ref: #register58062
|
Ref: #print-unique58419
|
||||||
Node: Custom register output62563
|
Node: register58487
|
||||||
Ref: #custom-register-output62694
|
Ref: #register58616
|
||||||
Node: register-match63991
|
Node: Custom register output63117
|
||||||
Ref: #register-match64127
|
Ref: #custom-register-output63248
|
||||||
Node: rewrite64310
|
Node: register-match64545
|
||||||
Ref: #rewrite64429
|
Ref: #register-match64681
|
||||||
Node: stats64498
|
Node: rewrite64864
|
||||||
Ref: #stats64603
|
Ref: #rewrite64983
|
||||||
Node: tags65484
|
Node: stats65052
|
||||||
Ref: #tags65584
|
Ref: #stats65157
|
||||||
Node: test65616
|
Node: tags66038
|
||||||
Ref: #test65702
|
Ref: #tags66138
|
||||||
Node: ADD-ON COMMANDS66070
|
Node: test66170
|
||||||
Ref: #add-on-commands66182
|
Ref: #test66256
|
||||||
Node: Official add-ons67469
|
Node: ADD-ON COMMANDS66624
|
||||||
Ref: #official-add-ons67611
|
Ref: #add-on-commands66736
|
||||||
Node: api67698
|
Node: Official add-ons68023
|
||||||
Ref: #api67789
|
Ref: #official-add-ons68165
|
||||||
Node: ui67841
|
Node: api68252
|
||||||
Ref: #ui67942
|
Ref: #api68343
|
||||||
Node: web68000
|
Node: ui68395
|
||||||
Ref: #web68091
|
Ref: #ui68496
|
||||||
Node: Third party add-ons68137
|
Node: web68554
|
||||||
Ref: #third-party-add-ons68314
|
Ref: #web68645
|
||||||
Node: diff68449
|
Node: Third party add-ons68691
|
||||||
Ref: #diff68548
|
Ref: #third-party-add-ons68868
|
||||||
Node: iadd68647
|
Node: diff69003
|
||||||
Ref: #iadd68763
|
Ref: #diff69102
|
||||||
Node: interest68846
|
Node: iadd69201
|
||||||
Ref: #interest68969
|
Ref: #iadd69317
|
||||||
Node: irr69064
|
Node: interest69400
|
||||||
Ref: #irr69164
|
Ref: #interest69523
|
||||||
Node: Experimental add-ons69242
|
Node: irr69618
|
||||||
Ref: #experimental-add-ons69396
|
Ref: #irr69718
|
||||||
Node: autosync69687
|
Node: Experimental add-ons69796
|
||||||
Ref: #autosync69801
|
Ref: #experimental-add-ons69950
|
||||||
Node: budget70040
|
Node: autosync70241
|
||||||
Ref: #budget70164
|
Ref: #autosync70355
|
||||||
Node: chart70230
|
Node: budget70594
|
||||||
Ref: #chart70349
|
Ref: #budget70718
|
||||||
Node: check70420
|
Node: chart70784
|
||||||
Ref: #check70524
|
Ref: #chart70903
|
||||||
|
Node: check70974
|
||||||
|
Ref: #check71078
|
||||||
|
|
||||||
End Tag Table
|
End Tag Table
|
||||||
|
|||||||
@ -1374,6 +1374,20 @@ COMMANDS
|
|||||||
hledger is a cross-platform program for tracking money, time, or any
|
hledger is a cross-platform program for tracking money, time, or any
|
||||||
...
|
...
|
||||||
|
|
||||||
|
import
|
||||||
|
Read new transactions added to each FILE since last run, and add them
|
||||||
|
to the main journal file.
|
||||||
|
|
||||||
|
--dry-run
|
||||||
|
just show the transactions to be imported
|
||||||
|
|
||||||
|
Input files are provided as arguments, or glob patterns. So eg to add
|
||||||
|
new transactions from all CSV files to the main journal: hledger import
|
||||||
|
*.csv
|
||||||
|
|
||||||
|
New transactions are detected like print --new (using .latest.FILE
|
||||||
|
state files).
|
||||||
|
|
||||||
incomestatement
|
incomestatement
|
||||||
Show an income statement. Alias: is.
|
Show an income statement. Alias: is.
|
||||||
|
|
||||||
@ -1511,18 +1525,19 @@ COMMANDS
|
|||||||
no similar-enough match, no transaction will be shown.
|
no similar-enough match, no transaction will be shown.
|
||||||
|
|
||||||
With --new, for each FILE being read, hledger reads (and writes) a spe-
|
With --new, for each FILE being read, hledger reads (and writes) a spe-
|
||||||
cial .latest.FILE file in the same directory, containing the latest
|
cial state file (.latest.FILE in the same directory), containing the
|
||||||
transaction date(s) that were seen last time FILE was read. When this
|
latest transaction date(s) that were seen last time FILE was read.
|
||||||
file is found, only transactions with newer dates (and new transactions
|
When this file is found, only transactions with newer dates (and new
|
||||||
on the latest date) are printed. This is useful for ignoring
|
transactions on the latest date) are printed. This is useful for
|
||||||
already-seen entries in import data, such as downloaded CSV files. Eg:
|
ignoring already-seen entries in import data, such as downloaded CSV
|
||||||
|
files. Eg:
|
||||||
|
|
||||||
$ hledger -f bank1.csv print --new
|
$ hledger -f bank1.csv print --new
|
||||||
# shows transactions added since last print --new on this file
|
# shows transactions added since last print --new on this file
|
||||||
|
|
||||||
This assumes that transactions added to FILE always have same or
|
This assumes that transactions added to FILE always have same or
|
||||||
increasing dates, and that transactions on the same day do not get
|
increasing dates, and that transactions on the same day do not get
|
||||||
reordered.
|
reordered. See also the import command.
|
||||||
|
|
||||||
The print command also supports output destination and CSV output.
|
The print command also supports output destination and CSV output.
|
||||||
Here's an example of print's CSV output:
|
Here's an example of print's CSV output:
|
||||||
|
|||||||
@ -134,6 +134,7 @@ library
|
|||||||
Hledger.Cli.Commands.Checkdupes
|
Hledger.Cli.Commands.Checkdupes
|
||||||
Hledger.Cli.Commands.Equity
|
Hledger.Cli.Commands.Equity
|
||||||
Hledger.Cli.Commands.Help
|
Hledger.Cli.Commands.Help
|
||||||
|
Hledger.Cli.Commands.Import
|
||||||
Hledger.Cli.Commands.Incomestatement
|
Hledger.Cli.Commands.Incomestatement
|
||||||
Hledger.Cli.Commands.Prices
|
Hledger.Cli.Commands.Prices
|
||||||
Hledger.Cli.Commands.Print
|
Hledger.Cli.Commands.Print
|
||||||
|
|||||||
@ -114,6 +114,7 @@ library:
|
|||||||
- Hledger.Cli.Commands.Checkdupes
|
- Hledger.Cli.Commands.Checkdupes
|
||||||
- Hledger.Cli.Commands.Equity
|
- Hledger.Cli.Commands.Equity
|
||||||
- Hledger.Cli.Commands.Help
|
- Hledger.Cli.Commands.Help
|
||||||
|
- Hledger.Cli.Commands.Import
|
||||||
- Hledger.Cli.Commands.Incomestatement
|
- Hledger.Cli.Commands.Incomestatement
|
||||||
- Hledger.Cli.Commands.Prices
|
- Hledger.Cli.Commands.Prices
|
||||||
- Hledger.Cli.Commands.Print
|
- Hledger.Cli.Commands.Print
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user