This commit is contained in:
parent
9bf0b05ec6
commit
8eea6b08ab
@ -5,6 +5,7 @@ import (
|
||||
"math"
|
||||
"os"
|
||||
"regexp"
|
||||
"sort"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
@ -22,7 +23,7 @@ func init() {
|
||||
}.NewHandler(os.Stderr)))
|
||||
}
|
||||
|
||||
const re = `^(?P<company>[a-zA-Z0-9-]+)(?:_[a-zA-Z]+)?_(?P<value>\d+\.\d{1,2})`
|
||||
const re = `^(?P<company>[a-zA-Z0-9-\s]+)(?:_[a-zA-Z0-9]+)?_(?P<value>\d+\.\d{1,2})`
|
||||
|
||||
type Value struct {
|
||||
Company string
|
||||
@ -102,6 +103,8 @@ func Create(out, dir string) error {
|
||||
|
||||
res := r.FindAllStringSubmatch(i.Name(), -1)
|
||||
if res == nil {
|
||||
log.Error("couldnt find match", "file", i.Name())
|
||||
|
||||
return fmt.Errorf("nothing found")
|
||||
}
|
||||
|
||||
@ -136,9 +139,12 @@ func Create(out, dir string) error {
|
||||
m[i.Company] += i.Value
|
||||
}
|
||||
|
||||
sm := SortMap(m)
|
||||
|
||||
valueLength := 0
|
||||
|
||||
for k, v := range m {
|
||||
for k, v := range sm {
|
||||
log.Info("KEY", "key", k, "category", cat)
|
||||
if err := f.SetCellStr(cat, fmt.Sprintf("A%d", valueLength+1), k); err != nil {
|
||||
return fmt.Errorf("failed to set cell: %w", err)
|
||||
}
|
||||
@ -218,3 +224,21 @@ func createCategoryChart(category string, length int, f *excelize.File) error {
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func SortMap[V any](m map[string]V) map[string]V {
|
||||
r := map[string]V{}
|
||||
|
||||
keys := make([]string, 0, len(m))
|
||||
|
||||
for key := range m {
|
||||
keys = append(keys, key)
|
||||
}
|
||||
|
||||
sort.Strings(keys)
|
||||
|
||||
for _, k := range keys {
|
||||
r[k] = m[k]
|
||||
}
|
||||
|
||||
return r
|
||||
}
|
||||
|
@ -30,6 +30,7 @@ func TestCreate(t *testing.T) {
|
||||
"aldi_10.98.jpg",
|
||||
"aldi_10.00.jpg",
|
||||
"edeka_10.11.jpg",
|
||||
"casa espana_20221216_62.19.jpg",
|
||||
},
|
||||
map[string][]want{
|
||||
"Food": {
|
||||
@ -53,6 +54,10 @@ func TestCreate(t *testing.T) {
|
||||
"BMA-ZON",
|
||||
"12.34",
|
||||
},
|
||||
{
|
||||
"CASA ESPANA",
|
||||
"62.19",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
@ -78,11 +83,11 @@ func TestCreate(t *testing.T) {
|
||||
|
||||
// NOTE: Uncomment this to view excel file.
|
||||
//
|
||||
// eFile, err := os.ReadFile(outfile)
|
||||
// is.NoErr(err)
|
||||
//
|
||||
// err = os.WriteFile(path.Join("/home/marv/wip/amseltools", "foo.xlsx"), eFile, 0o644)
|
||||
// is.NoErr(err)
|
||||
eFile, err := os.ReadFile(outfile)
|
||||
is.NoErr(err)
|
||||
|
||||
err = os.WriteFile(path.Join("/home/marv/wip/amseltools", "foo.xlsx"), eFile, 0o644)
|
||||
is.NoErr(err)
|
||||
|
||||
// Read the excel.
|
||||
f, err := excelize.OpenFile(outfile)
|
||||
@ -119,3 +124,27 @@ func TestCategoriesInsert(t *testing.T) {
|
||||
|
||||
is.Equal(dirtoexcel.Categories{"NonFood": []dirtoexcel.Value{{"AMAZON", 11.11}}}, m)
|
||||
}
|
||||
|
||||
func TestSortMap(t *testing.T) {
|
||||
tables := []struct {
|
||||
name string
|
||||
input map[string]int
|
||||
expected map[string]int
|
||||
}{
|
||||
{
|
||||
"00",
|
||||
map[string]int{"FOO": 1, "BAR": 2, "ZONK": 3},
|
||||
map[string]int{"BAR": 2, "FOO": 1, "ZONK": 3},
|
||||
},
|
||||
}
|
||||
|
||||
is := is.New(t)
|
||||
|
||||
for _, tt := range tables {
|
||||
tt := tt
|
||||
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
is.Equal(dirtoexcel.SortMap(tt.input), tt.expected)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user