package main
import (
"github.com/Kirides/go-dbf"
"golang.org/x/text/encoding/charmap"
)
func main() {
db, err := dbf.Open(`C:\Path\To\Some.dbf`, charmap.Windows1252.NewDecoder())
if err != nil {
panic(err)
}
defer db.Close()
}
err = db.Scan(func(r dbf.Record) error {
if !r.Deleted() {
_, err = r.ToMap() // returns a map[string]interface{}
if err != nil {
panic(err)
}
}
return nil
})
if err != nil {
panic(err)
}
// recno is zero based
err := db.RecordAt(/*recno:*/ 5, func(r dbf.Record) {
if !r.Deleted() {
_, err = r.ToMap() // returns a map[string]interface{}
if err != nil {
panic(err)
}
}
})
if err != nil {
panic(err)
}
// Read the accompanying DBC file
err := db.ReadDBC()
// Read a DBC that lies relative to a .dbf
dbc, err := dbf.ReadDBC(filepath.Join(`location/of/dbf/`), db.DBC()), charmap.Windows1252.NewDecoder())
err := db.ReadFromDBC(dbc)
Example of reusing a dbc
knownDbcs := make(map[string]*dbf.Dbc)
dec := charmap.Windows1252.NewDecoder()
db, _ := dbf.Open(`...`, dec)
if db.DBC() != "" {
if d, ok := knownDbcs[db.DBC()]; ok {
db.ReadFromDBC(d)
} else {
dbc, err := dbf.ReadDBC(
filepath.Join(
filepath.Dir(dbfPath), db.DBC()),
dec)
// ...
db.ReadFromDBC(dbc)
knownDbcs[db.DBC()] = dbc
}
}
C
-> stringV
-> string (basic support, might fail on tables with large amount of nullables and/or varchars)M
-> stringD
-> time.Time (in local timezone)T
-> time.Time (in local timezone)I
-> uint32L
-> boolN
- No decimals: int64
- Decimals: float64
G
General (COM)Q
BinaryB
Double