diff --git a/ledger/bpi.go b/ledger/bpi.go index 16a7ac0..c8e00df 100644 --- a/ledger/bpi.go +++ b/ledger/bpi.go @@ -1,6 +1,13 @@ package ledger -import "io" +import ( + "bufio" + "bytes" + "fmt" + "io" + "os" + "strconv" +) type BPIs string @@ -13,5 +20,37 @@ func NewBPIs(p string) (BPIs, error) { } func (bpis BPIs) values() (map[Currency]BPI, error) { - return nil, io.EOF + f, err := os.Open(string(bpis)) + if os.IsNotExist(err) { + return nil, nil + } + if err != nil { + return nil, err + } + defer f.Close() + + result := make(map[Currency]BPI) + + r := bufio.NewReader(f) + for { + line, err := readTransactionLine(r) + if len(line) > 0 { + fields := bytes.Fields(line) + if len(fields) > 3 { + date := fields[1] + currency := fields[len(fields)-2] + value, err := strconv.ParseFloat(string(fields[len(fields)-1][1:]), 64) + if err != nil { + return nil, err + } + return nil, fmt.Errorf("what do with %s/%s/%.2f?", date, currency, value) + } + return nil, fmt.Errorf("what do: %s", line) + } + if err == io.EOF { + return result, nil + } else if err != nil { + return result, err + } + } }