doc: CSV: headings, clarifications
This commit is contained in:
		
							parent
							
								
									b69b149d39
								
							
						
					
					
						commit
						96a6d2239a
					
				| @ -25,17 +25,20 @@ hledger will create it if necessary, with some default rules which you'll need t | ||||
| At minimum, the rules file must specify the `date` and `amount` fields. | ||||
| For an example, see [How to read CSV files](how-to-read-csv-files.html). | ||||
| 
 | ||||
| (For CSV output, see [CSV output](#csv-output).) | ||||
| To learn about *exporting* CSV, see [CSV output](hledger.html#csv-output). | ||||
| 
 | ||||
| 
 | ||||
| ## CSV rules | ||||
| # CSV RULES | ||||
| 
 | ||||
| The following six kinds of rule can appear in the rules file, in any order. | ||||
| Blank lines and lines beginning with `#` or `;` are ignored. | ||||
| 
 | ||||
| **`skip` *N***\ | ||||
| ## skip | ||||
| 
 | ||||
| `skip `*`N`* | ||||
| 
 | ||||
| Skip this number of CSV records at the beginning. | ||||
| You'll need this when your CSV contains header lines. Eg: | ||||
| You'll need this whenever your CSV data contains header lines. Eg: | ||||
| <!-- XXX --> | ||||
| <!-- hledger tries to skip initial CSV header lines automatically. --> | ||||
| <!-- If it guesses wrong, use this directive to skip exactly N lines. --> | ||||
| @ -45,50 +48,60 @@ You'll need this when your CSV contains header lines. Eg: | ||||
| skip 1 | ||||
| ``` | ||||
| 
 | ||||
| **`date-format` *DATEFMT***\ | ||||
| ## date-format | ||||
| 
 | ||||
| `date-format `*`DATEFMT`* | ||||
| 
 | ||||
| When your CSV date fields are not formatted like `YYYY/MM/DD` (or `YYYY-MM-DD` or `YYYY.MM.DD`), | ||||
| you'll need to specify the format. | ||||
| DATEFMT is a [strptime-like date parsing pattern](http://hackage.haskell.org/packages/archive/time/latest/doc/html/Data-Time-Format.html#v:formatTime), | ||||
| which must parse the date field values completely. Examples: | ||||
| 
 | ||||
| ``` {.rules .display-table} | ||||
| # parses "6/11/2013": | ||||
| # for dates like "6/11/2013": | ||||
| date-format %-d/%-m/%Y | ||||
| ``` | ||||
| 
 | ||||
| ``` {.rules .display-table} | ||||
| # parses "11/06/2013": | ||||
| # for dates like "11/06/2013": | ||||
| date-format %m/%d/%Y | ||||
| ``` | ||||
| 
 | ||||
| ``` {.rules .display-table} | ||||
| # parses "2013-Nov-06": | ||||
| # for dates like "2013-Nov-06": | ||||
| date-format %Y-%h-%d | ||||
| ``` | ||||
| 
 | ||||
| ``` {.rules .display-table} | ||||
| # parses "11/6/2013 11:32 PM": | ||||
| # for dates like "11/6/2013 11:32 PM": | ||||
| date-format %-m/%-d/%Y %l:%M %p | ||||
| ``` | ||||
| 
 | ||||
| **`fields` *CSVFIELDNAME1*, *CSVFIELDNAME2*...**\ | ||||
| (Field list)\ | ||||
| This (a) names the CSV fields (names may not contain whitespace), | ||||
| ## field list | ||||
| 
 | ||||
| `fields `*`FIELDNAME1`*, *`FIELDNAME2`*... | ||||
| 
 | ||||
| This (a) names the CSV fields, in order (names may not contain whitespace, but may be omitted), | ||||
| and (b) assigns them to journal entry fields if you use any of these standard field names: | ||||
| `date`, `date2`, `status`, `code`, `description`, `comment`, `account1`, `account2`, `amount`, `amount-in`, `amount-out`, `currency`. | ||||
| Eg: | ||||
| ```rules | ||||
| # use the 1st, 2nd and 4th CSV fields as the entry date, description and amount | ||||
| # give the 7th and 8th fields custom names for later reference | ||||
| # use the 1st, 2nd and 4th CSV fields as the entry'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 | ||||
| ``` | ||||
| 
 | ||||
| ***ENTRYFIELDNAME* *FIELDVALUE***\ | ||||
| (Field assignment)\ | ||||
| ## field assignment | ||||
| 
 | ||||
| *`ENTRYFIELDNAME`* *`FIELDVALUE`* | ||||
| 
 | ||||
| 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 (`%CSVFIELDNAME`) or 1-based position (`%N`). | ||||
| <!-- Whitespace before or after the value is ignored. --> | ||||
| Field assignments can be used instead of or in addition to a field list. | ||||
| Eg: | ||||
| ```{.rules .display-table} | ||||
| # set the amount to the 4th CSV field with "USD " prepended | ||||
| @ -98,15 +111,18 @@ amount USD %4 | ||||
| # combine three fields to make a comment (containing two tags) | ||||
| comment note: %somefield - %anotherfield, date: %1 | ||||
| ``` | ||||
| Field assignments can be used instead of or in addition to a field list. | ||||
| 
 | ||||
| ## conditional block | ||||
| 
 | ||||
| `if` *`PATTERN`*\ | ||||
|     *`FIELDASSIGNMENTS`*... | ||||
| 
 | ||||
| `if`\ | ||||
| *`PATTERN`*\ | ||||
| *`PATTERN`*...\ | ||||
|     *`FIELDASSIGNMENTS`*... | ||||
| 
 | ||||
| **`if` *PATTERN*\ | ||||
|     *FIELDASSIGNMENTS*...**\ | ||||
| or\ | ||||
| **`if`\ | ||||
| *PATTERN*\ | ||||
| *PATTERN*...\ | ||||
|     *FIELDASSIGNMENTS*...**\ | ||||
| (Conditional block)\ | ||||
| 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's not yet possible to match within a | ||||
| @ -126,10 +142,13 @@ monthly service fee | ||||
| atm transaction fee | ||||
| banking thru software | ||||
|  account2 expenses:business:banking | ||||
|  comment  XXX deductible ? check | ||||
|  comment  XXX deductible ? check it | ||||
| ``` | ||||
| 
 | ||||
| **`include` *RULESFILE***\ | ||||
| ## include | ||||
| 
 | ||||
| `include `*`RULESFILE`* | ||||
| 
 | ||||
| Include another rules file at this point. `RULESFILE` is either an absolute file path or | ||||
| a path relative to the current file's directory. Eg: | ||||
| ```rules | ||||
| @ -137,7 +156,7 @@ a path relative to the current file's directory. Eg: | ||||
| include common.rules | ||||
| ``` | ||||
| 
 | ||||
| ## CSV tips | ||||
| # TIPS | ||||
| 
 | ||||
| Each generated journal entry will have two postings, to `account1` and `account2` respectively. | ||||
| Currently it's not possible to generate entries with more than two postings. | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user