Next: , Previous: Period expressions, Up: Running Ledger


2.7 File format

The ledger file format is quite simple, but also very flexible. It supports many options, though typically the user can ignore most of them. They are summarized below.

The initial character of each line determines what the line means, and how it should be interpreted. Allowable initial characters are:

NUMBER
A line beginning with a number denotes an entry. It may be followed by any number of lines, each beginning with whitespace, to denote the entry's account transactions. The format of the first line is:
          DATE[=EDATE] [*|!] [(CODE)] DESC

If ‘*’ appears after the date (with optional effective date), it indicates the entry is “cleared”, which can mean whatever the user wants it t omean. If ‘!’ appears after the date, it indicates d the entry is “pending”; i.e., tentatively cleared from the user's point of view, but not yet actually cleared. If a ‘CODE’ appears in parentheses, it may be used to indicate a check number, or the type of the transaction. Following these is the payee, or a description of the transaction.

The format of each following transaction is:

            ACCOUNT  AMOUNT  [; NOTE]

The ‘ACCOUNT’ may be surrounded by parentheses if it is a virtual transactions, or square brackets if it is a virtual transactions that must balance. The ‘AMOUNT’ can be followed by a per-unit transaction cost, by specifying ‘@ AMOUNT’, or a complete transaction cost with ‘@@ AMOUNT’. Lastly, the ‘NOTE’ may specify an actual and/or effective date for the transaction by using the syntax ‘[ACTUAL_DATE]’ or ‘[=EFFECTIVE_DATE]’ or ‘[ACTUAL_DATE=EFFECtIVE_DATE]’.

=
An automated entry. A value expression must appear after the equal sign.

After this initial line there should be a set of one or more transactions, just as if it were normal entry. If the amounts of the transactions have no commodity, they will be applied as modifiers to whichever real transaction is matched by the value expression.

~
A period entry. A period expression must appear after the tilde.

After this initial line there should be a set of one or more transactions, just as if it were normal entry.

!
A line beginning with an exclamation mark denotes a command directive. It must be immediately followed by the command word. The supported commands are:
!include
Include the stated ledger file.
!account
The account name is given is taken to be the parent of all transactions that follow, until ‘!end’ is seen.
!end
Ends an account block.

;
A line beginning with a colon indicates a comment, and is ignored.
Y
If a line begins with a capital Y, it denotes the year used for all subsequent entries that give a date without a year. The year should appear immediately after the Y, for example: ‘Y2004’. This is useful at the beginning of a file, to specify the year for that file. If all entries specify a year, however, this command has no effect.
P
Specifies a historical price for a commodity. These are usually found in a pricing history file (see the -Q option). The syntax is:
          P DATE SYMBOL PRICE

N SYMBOL
Indicates that pricing information is to be ignored for a given symbol, nor will quotes ever be downloaded for that symbol. Useful with a home currency, such as the dollar ($). It is recommended that these pricing options be set in the price database file, which defaults to ~/.pricedb. The syntax for this command is:
          N SYMBOL

D AMOUNT
Specifies the default commodity to use, by specifying an amount in the expected format. The entry command will use this commodity as the default when none other can be determined. This command may be used multiple times, to set the default flags for different commodities; whichever is seen last is used as the default commodity. For example, to set US dollars as the default commodity, while also setting the thousands flag and decimal flag for that commodity, use:
          D $1,000.00

C AMOUNT1 = AMOUNT2
Specifies a commodity conversion, where the first amount is given to be equivalent to the second amount. The first amount should use the decimal precision desired during reporting:
          C 1.00 Kb = 1024 bytes

i, o, b, h
These four relate to timeclock support, which permits ledger to read timelog files. See the timeclock's documentation for more info on the syntax of its timelog files.