dbfmini

package module
v0.0.0-...-df86778 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 16, 2025 License: MIT Imports: 13 Imported by: 0

README

dbfmini

Version Go Reference Go Report Card

Leitor puro Go para arquivos dBASE/DBF (sem dependências de bibliotecas DBF de terceiros).
Suporta campos: C, N, F, Y, L, D, I, T, B.

Instalação

go get github.com/alberto255345/dbfmini@latest

Uso rápido

package main

import (
    "fmt"
    "log"

    "github.com/alberto255345/dbfmini"
)

func main() {
    db, err := dbfmini.Open("clientes.dbf", nil)
    if err != nil {
        log.Fatalf("abrindo DBF: %v", err)
    }

    for {
        registros, err := db.ReadRecords(200) // leitura em lotes (opcional)
        if err != nil {
            log.Fatalf("lendo registros: %v", err)
        }
        if len(registros) == 0 {
            break // EOF
        }
        for _, rec := range registros {
            saldo, _ := rec["SALDO"].(float64)
            fmt.Printf("%v => saldo %.2f\n", rec["NOME"], saldo)
        }
    }
}

Codificações e modos de leitura

  • Codificações: por padrão ISO-8859-1. Ajuste com OpenOptions.Encoding:

    • Encoding.Default define a página de códigos de todos os campos (CP850, CP437, CP1252, ISO-8859-1, UTF-8).

    • Encoding.PerField permite sobrescrever por nome de campo, ex.:

      Encoding{Default: "CP850", PerField: map[string]string{"NOME": "CP1252"}}
      
  • Modos:

    • ReadStrict (padrão) valida versão/tipos e falha no primeiro problema.
    • ReadLoose tolera inconsistências e tenta seguir para o próximo registro.
  • Registros deletados: use IncludeDeleted: true para incluir registros marcados como excluídos (rec["_deleted"] == true).

Limitações

  • Campos M (memo) ainda não são lidos; interpretação de .DBT/.FPT em desenvolvimento.
  • Biblioteca somente leitura: não cria/edita DBF (por enquanto).
  • Tipos específicos do Visual FoxPro (ex.: General, Variant) ainda não são suportados.

Roadmap

  • Suporte completo a campos memo (.DBT/.FPT).
  • APIs de escrita/atualização de registros.
  • Suporte ampliado a tipos/versões e validações adicionais.

Licença

Distribuído sob os termos da licença MIT.

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type DBF

type DBF struct {
	Path          string
	RecordCount   uint32
	DateOfLastUpd time.Time
	Fields        []Field
	// contains filtered or unexported fields
}

func Open

func Open(path string, opts *OpenOptions) (*DBF, error)

func (*DBF) ReadRecords

func (d *DBF) ReadRecords(maxCount int) ([]Record, error)

ReadRecords lê até maxCount; se maxCount<=0 lê até o fim.

func (*DBF) Reset

func (d *DBF) Reset()

Reset reinicia o cursor interno para nova leitura.

func (*DBF) Version

func (d *DBF) Version() byte

Version retorna o byte de versão do arquivo DBF.

type Encoding

type Encoding struct {
	Default  string
	PerField map[string]string // ex.: {"NOME": "CP1252"}
}

Encoding permite um default e (opcional) overrides por campo.

type Field

type Field struct {
	Name          string
	Type          byte // 'C','N','F','Y','L','D','I','M','T','B'
	Size          uint8
	DecimalPlaces uint8
}

type OpenOptions

type OpenOptions struct {
	ReadMode       ReadMode
	Encoding       Encoding // Default: ISO-8859-1
	IncludeDeleted bool
}

type ReadMode

type ReadMode string
const (
	ReadStrict ReadMode = "strict"
	ReadLoose  ReadMode = "loose"
)

type Record

type Record map[string]any

Record é um mapa com valores tipados por Go nativo. Se IncludeDeleted=true, adicionamos a chave "_deleted": bool.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL