mirror of
https://gitlab.com/datalifeit/python-retrofix
synced 2023-12-14 06:13:03 +01:00
77 lines
2.2 KiB
ReStructuredText
77 lines
2.2 KiB
ReStructuredText
RetroFix documentation
|
|
======================
|
|
|
|
RetroFix is a python library for reading and writing fixed-size field text file
|
|
and more specifically for managing files from Spanish banks and public
|
|
institutions, including:
|
|
|
|
- CSB 19, 32, 34 (several versions), 43, 57 & 58
|
|
- AEAT 303, 340, 347 & 349
|
|
|
|
Defining record structures
|
|
--------------------------
|
|
|
|
RetroFix allows an easy way to define the structure of fixed size records by
|
|
creating a tuple which contains a tuple of size 4 for each field, containing:
|
|
start position, length, name and type.
|
|
|
|
Start position and length are numeric fields which define where the field is
|
|
located in a given record. The name is the internal name of the field and type
|
|
is a class or instance of a class inheriting retrofix.fields.Field.
|
|
|
|
RetroFix provides the following field types (new ones can also be created):
|
|
|
|
Char
|
|
This is the simplest one and stores the content in a string.
|
|
|
|
Const
|
|
This one inherits Char but ensures that the record contains the exact
|
|
characters defined as parameter of the constructor.
|
|
|
|
Account
|
|
Inherits Char but checks that the value of the field is a valid bank account
|
|
number as defined by Spanish bank number format.
|
|
|
|
Numeric
|
|
Used for numeric fields. You can get and set the value using Decimals.
|
|
|
|
Integer
|
|
Just like Numeric but with integers.
|
|
|
|
Date
|
|
Ensures the field matches the date format supplied to the constructor.
|
|
|
|
Selection
|
|
Only allows a given set of string values supplied to the constructor.
|
|
|
|
Boolean
|
|
Similar to selection but only two values are accepted (supplied to the
|
|
constructor) and you can set and get the values using a boolean.
|
|
|
|
Take a look at the following example:
|
|
|
|
::
|
|
|
|
from retrofix import record
|
|
from retrofix.fields import *
|
|
|
|
RECORD = (
|
|
( 1, 2, 'record_type', Const('XX')),
|
|
( 3, 10, 'name', Char),
|
|
( 33, 15, 'amount', Number(sign=SIGN_N)),
|
|
( 38, 17, 'date', Date('%d%m%y')),
|
|
)
|
|
|
|
def read(data):
|
|
lines = data.splitlines()
|
|
records = []
|
|
current_line = lines.pop(0)
|
|
records.append(record.Record.extract(current_line, RECORD))
|
|
return records
|
|
|
|
lines = read(open('myfile.txt', 'r').read())
|
|
f = open('newfile.txt')
|
|
try:
|
|
f.write(record.write(lines))
|
|
finally:
|
|
f.close()
|