Add mapping commodities

This commit is contained in:
2022-05-25 12:12:08 +08:00
parent 57c7a49368
commit 63e92d86eb

35
main.go
View File

@@ -1,6 +1,7 @@
package main package main
import ( import (
"bufio"
"encoding/json" "encoding/json"
"errors" "errors"
"flag" "flag"
@@ -24,9 +25,10 @@ func main() {
ledgerBinary := flag.String("b", "ledger", "Ledger Binary") ledgerBinary := flag.String("b", "ledger", "Ledger Binary")
ledgerFile := flag.String("f", "ledger.ledger", "Ledger File") ledgerFile := flag.String("f", "ledger.ledger", "Ledger File")
priceDbFile := flag.String("p", "prices.db", "Price Database File") priceDbFile := flag.String("p", "prices.db", "Price Database File")
mappingFile := flag.String("m", "mapping", "Commodities Name Mapping File")
flag.Parse() flag.Parse()
commodities := GetCommodities(*ledgerFile, *ledgerBinary) commodities := GetCommodities(*ledgerFile, *ledgerBinary, *mappingFile)
pricedb, err := os.OpenFile(*priceDbFile, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) pricedb, err := os.OpenFile(*priceDbFile, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
if err != nil { if err != nil {
@@ -83,7 +85,7 @@ func GetTimeString() string {
return time.Now().Format("2006-01-02 15:04:05") return time.Now().Format("2006-01-02 15:04:05")
} }
func GetCommodities(ledger string, binary string) []string { func GetCommodities(ledger string, binary string, mappingFile string) []string {
cmd := exec.Command(binary, "-f", ledger, "commodities") cmd := exec.Command(binary, "-f", ledger, "commodities")
out, err := cmd.Output() out, err := cmd.Output()
if err != nil { if err != nil {
@@ -91,15 +93,38 @@ func GetCommodities(ledger string, binary string) []string {
} }
a := strings.Split(string(out), "\n") a := strings.Split(string(out), "\n")
sliceOut := a[:len(a)-1] sliceOut := a[:len(a)-1]
mapping := GetMapping(mappingFile)
commodities := make([]string, 0) commodities := make([]string, 0)
for _, e := range sliceOut { for _, e := range sliceOut {
e = strings.Trim(e, `"`) e = strings.Trim(e, `"`)
if IsTicker(e) { if value, ok := mapping[e]; ok {
commodities = append(commodities, e) e = value
}
commodities = append(commodities, e)
}
log.Println(commodities)
return commodities
}
func GetMapping(mappingFile string) map[string]string {
result := make(map[string]string)
file, err := os.Open(mappingFile)
if err != nil {
log.Fatalf("Open mapping file failed: %s\n", err)
}
defer file.Close()
fileScanner := bufio.NewScanner(file)
for fileScanner.Scan() {
arr := strings.Split(fileScanner.Text(), ":")
if len(arr) == 2 {
result[arr[0]] = strings.Trim(arr[1], "\n")
} }
} }
return commodities log.Println(result)
return result
} }
func IsTicker(s string) bool { func IsTicker(s string) bool {