240 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
			
		
		
	
	
			240 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
 | 
						|
.TH "hledger_csv" "5" "May 2016" "hledger 0.28dev" "hledger User Manuals"
 | 
						|
 | 
						|
 | 
						|
 | 
						|
.SH NAME
 | 
						|
.PP
 | 
						|
CSV \- how hledger reads CSV data, and the CSV rules file format
 | 
						|
.SH DESCRIPTION
 | 
						|
.PP
 | 
						|
hledger can read CSV files, converting each CSV record into a journal
 | 
						|
entry (transaction), if you provide some conversion hints in a "rules
 | 
						|
file".
 | 
						|
This file should be named like the CSV file with an additional
 | 
						|
\f[C]\&.rules\f[] suffix (eg: \f[C]mybank.csv.rules\f[]); or, you can
 | 
						|
specify the file with \f[C]\-\-rules\-file\ PATH\f[].
 | 
						|
hledger will create it if necessary, with some default rules which
 | 
						|
you\[aq]ll need to adjust.
 | 
						|
At minimum, the rules file must specify the \f[C]date\f[] and
 | 
						|
\f[C]amount\f[] fields.
 | 
						|
For an example, see How to read CSV files.
 | 
						|
.PP
 | 
						|
To learn about \f[I]exporting\f[] CSV, see CSV output.
 | 
						|
.SH CSV RULES
 | 
						|
.PP
 | 
						|
The following six kinds of rule can appear in the rules file, in any
 | 
						|
order.
 | 
						|
Blank lines and lines beginning with \f[C]#\f[] or \f[C];\f[] are
 | 
						|
ignored.
 | 
						|
.SS skip
 | 
						|
.PP
 | 
						|
\f[C]skip\f[]\f[I]\f[C]N\f[]\f[]
 | 
						|
.PP
 | 
						|
Skip this number of CSV records at the beginning.
 | 
						|
You\[aq]ll need this whenever your CSV data contains header lines.
 | 
						|
Eg:
 | 
						|
.IP
 | 
						|
.nf
 | 
						|
\f[C]
 | 
						|
#\ ignore\ the\ first\ CSV\ line
 | 
						|
skip\ 1
 | 
						|
\f[]
 | 
						|
.fi
 | 
						|
.SS date\-format
 | 
						|
.PP
 | 
						|
\f[C]date\-format\f[]\f[I]\f[C]DATEFMT\f[]\f[]
 | 
						|
.PP
 | 
						|
When your CSV date fields are not formatted like \f[C]YYYY/MM/DD\f[] (or
 | 
						|
\f[C]YYYY\-MM\-DD\f[] or \f[C]YYYY.MM.DD\f[]), you\[aq]ll need to
 | 
						|
specify the format.
 | 
						|
DATEFMT is a strptime\-like date parsing pattern, which must parse the
 | 
						|
date field values completely.
 | 
						|
Examples:
 | 
						|
.IP
 | 
						|
.nf
 | 
						|
\f[C]
 | 
						|
#\ for\ dates\ like\ "6/11/2013":
 | 
						|
date\-format\ %\-d/%\-m/%Y
 | 
						|
\f[]
 | 
						|
.fi
 | 
						|
.IP
 | 
						|
.nf
 | 
						|
\f[C]
 | 
						|
#\ for\ dates\ like\ "11/06/2013":
 | 
						|
date\-format\ %m/%d/%Y
 | 
						|
\f[]
 | 
						|
.fi
 | 
						|
.IP
 | 
						|
.nf
 | 
						|
\f[C]
 | 
						|
#\ for\ dates\ like\ "2013\-Nov\-06":
 | 
						|
date\-format\ %Y\-%h\-%d
 | 
						|
\f[]
 | 
						|
.fi
 | 
						|
.IP
 | 
						|
.nf
 | 
						|
\f[C]
 | 
						|
#\ for\ dates\ like\ "11/6/2013\ 11:32\ PM":
 | 
						|
date\-format\ %\-m/%\-d/%Y\ %l:%M\ %p
 | 
						|
\f[]
 | 
						|
.fi
 | 
						|
.SS field list
 | 
						|
.PP
 | 
						|
\f[C]fields\f[]\f[I]\f[C]FIELDNAME1\f[]\f[],
 | 
						|
\f[I]\f[C]FIELDNAME2\f[]\f[]...
 | 
						|
.PP
 | 
						|
This (a) names the CSV fields, in order (names may not contain
 | 
						|
whitespace; uninteresting names may be left blank), and (b) assigns them
 | 
						|
to journal entry fields if you use any of these standard field names:
 | 
						|
\f[C]date\f[], \f[C]date2\f[], \f[C]status\f[], \f[C]code\f[],
 | 
						|
\f[C]description\f[], \f[C]comment\f[], \f[C]account1\f[],
 | 
						|
\f[C]account2\f[], \f[C]amount\f[], \f[C]amount\-in\f[],
 | 
						|
\f[C]amount\-out\f[], \f[C]currency\f[].
 | 
						|
Eg:
 | 
						|
.IP
 | 
						|
.nf
 | 
						|
\f[C]
 | 
						|
#\ use\ the\ 1st,\ 2nd\ and\ 4th\ CSV\ fields\ as\ the\ entry\[aq]s\ date,\ description\ and\ amount,
 | 
						|
#\ and\ give\ the\ 7th\ and\ 8th\ fields\ meaningful\ names\ for\ later\ reference:
 | 
						|
#
 | 
						|
#\ CSV\ field:
 | 
						|
#\ \ \ \ \ \ 1\ \ \ \ \ 2\ \ \ \ \ \ \ \ \ \ \ \ 3\ 4\ \ \ \ \ \ \ 5\ 6\ 7\ \ \ \ \ \ \ \ \ \ 8
 | 
						|
#\ entry\ field:
 | 
						|
fields\ date,\ description,\ ,\ amount,\ ,\ ,\ somefield,\ anotherfield
 | 
						|
\f[]
 | 
						|
.fi
 | 
						|
.SS field assignment
 | 
						|
.PP
 | 
						|
\f[I]\f[C]ENTRYFIELDNAME\f[]\f[] \f[I]\f[C]FIELDVALUE\f[]\f[]
 | 
						|
.PP
 | 
						|
This sets a journal entry field (one of the standard names above) to the
 | 
						|
given text value, which can include CSV field values interpolated by
 | 
						|
name (\f[C]%CSVFIELDNAME\f[]) or 1\-based position (\f[C]%N\f[]).
 | 
						|
 Eg:
 | 
						|
.IP
 | 
						|
.nf
 | 
						|
\f[C]
 | 
						|
#\ set\ the\ amount\ to\ the\ 4th\ CSV\ field\ with\ "USD\ "\ prepended
 | 
						|
amount\ USD\ %4
 | 
						|
\f[]
 | 
						|
.fi
 | 
						|
.IP
 | 
						|
.nf
 | 
						|
\f[C]
 | 
						|
#\ combine\ three\ fields\ to\ make\ a\ comment\ (containing\ two\ tags)
 | 
						|
comment\ note:\ %somefield\ \-\ %anotherfield,\ date:\ %1
 | 
						|
\f[]
 | 
						|
.fi
 | 
						|
.PP
 | 
						|
Field assignments can be used instead of or in addition to a field list.
 | 
						|
.SS conditional block
 | 
						|
.PP
 | 
						|
\f[C]if\f[] \f[I]\f[C]PATTERN\f[]\f[]
 | 
						|
.PD 0
 | 
						|
.P
 | 
						|
.PD
 | 
						|
\ \ \ \ \f[I]\f[C]FIELDASSIGNMENTS\f[]\f[]...
 | 
						|
.PP
 | 
						|
\f[C]if\f[]
 | 
						|
.PD 0
 | 
						|
.P
 | 
						|
.PD
 | 
						|
\f[I]\f[C]PATTERN\f[]\f[]
 | 
						|
.PD 0
 | 
						|
.P
 | 
						|
.PD
 | 
						|
\f[I]\f[C]PATTERN\f[]\f[]...
 | 
						|
.PD 0
 | 
						|
.P
 | 
						|
.PD
 | 
						|
\ \ \ \ \f[I]\f[C]FIELDASSIGNMENTS\f[]\f[]...
 | 
						|
.PP
 | 
						|
This applies one or more field assignments, only to those CSV records
 | 
						|
matched by one of the PATTERNs.
 | 
						|
The patterns are case\-insensitive regular expressions which match
 | 
						|
anywhere within the whole CSV record (it\[aq]s not yet possible to match
 | 
						|
within a specific field).
 | 
						|
When there are multiple patterns they can be written on separate lines,
 | 
						|
unindented.
 | 
						|
The field assignments are on separate lines indented by at least one
 | 
						|
space.
 | 
						|
Examples:
 | 
						|
.IP
 | 
						|
.nf
 | 
						|
\f[C]
 | 
						|
#\ if\ the\ CSV\ record\ contains\ "groceries",\ set\ account2\ to\ "expenses:groceries"
 | 
						|
if\ groceries
 | 
						|
\ account2\ expenses:groceries
 | 
						|
\f[]
 | 
						|
.fi
 | 
						|
.IP
 | 
						|
.nf
 | 
						|
\f[C]
 | 
						|
#\ if\ the\ CSV\ record\ contains\ any\ of\ these\ patterns,\ set\ account2\ and\ comment\ as\ shown
 | 
						|
if
 | 
						|
monthly\ service\ fee
 | 
						|
atm\ transaction\ fee
 | 
						|
banking\ thru\ software
 | 
						|
\ account2\ expenses:business:banking
 | 
						|
\ comment\ \ XXX\ deductible\ ?\ check\ it
 | 
						|
\f[]
 | 
						|
.fi
 | 
						|
.SS include
 | 
						|
.PP
 | 
						|
\f[C]include\f[]\f[I]\f[C]RULESFILE\f[]\f[]
 | 
						|
.PP
 | 
						|
Include another rules file at this point.
 | 
						|
\f[C]RULESFILE\f[] is either an absolute file path or a path relative to
 | 
						|
the current file\[aq]s directory.
 | 
						|
Eg:
 | 
						|
.IP
 | 
						|
.nf
 | 
						|
\f[C]
 | 
						|
#\ rules\ reused\ with\ several\ CSV\ files
 | 
						|
include\ common.rules
 | 
						|
\f[]
 | 
						|
.fi
 | 
						|
.SH TIPS
 | 
						|
.PP
 | 
						|
Each generated journal entry will have two postings, to
 | 
						|
\f[C]account1\f[] and \f[C]account2\f[] respectively.
 | 
						|
Currently it\[aq]s not possible to generate entries with more than two
 | 
						|
postings.
 | 
						|
.PP
 | 
						|
If the CSV has debit/credit amounts in separate fields, assign to the
 | 
						|
\f[C]amount\-in\f[] and \f[C]amount\-out\f[] pseudo fields instead of
 | 
						|
\f[C]amount\f[].
 | 
						|
.PP
 | 
						|
If the CSV has the currency in a separate field, assign that to the
 | 
						|
\f[C]currency\f[] pseudo field which will be automatically prepended to
 | 
						|
the amount.
 | 
						|
(Or you can do the same thing with a field assignment.)
 | 
						|
.PP
 | 
						|
If an amount value is parenthesised, it will be de\-parenthesised and
 | 
						|
sign\-flipped automatically.
 | 
						|
.PP
 | 
						|
The generated journal entries will be sorted by date.
 | 
						|
The original order of same\-day entries will be preserved, usually.
 | 
						|
 | 
						|
 | 
						|
.SH "REPORTING BUGS"
 | 
						|
Report bugs at http://bugs.hledger.org
 | 
						|
(or on the #hledger IRC channel or hledger mail list)
 | 
						|
 | 
						|
.SH AUTHORS
 | 
						|
Simon Michael <simon@joyful.com> and contributors
 | 
						|
 | 
						|
.SH COPYRIGHT
 | 
						|
 | 
						|
Copyright (C) 2007-2016 Simon Michael.
 | 
						|
.br
 | 
						|
Released under GNU GPL v3 or later.
 | 
						|
 | 
						|
.SH SEE ALSO
 | 
						|
hledger(1), hledger\-ui(1), hledger\-web(1), hledger\-api(1),
 | 
						|
hledger_csv(5), hledger_journal(5), hledger_timeclock(5), hledger_timedot(5),
 | 
						|
ledger(1)
 | 
						|
 | 
						|
http://hledger.org
 |