Add mapping commodities
This commit is contained in:
33
main.go
33
main.go
@@ -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,17 +93,40 @@ 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 {
|
||||||
|
e = value
|
||||||
|
}
|
||||||
commodities = append(commodities, e)
|
commodities = append(commodities, e)
|
||||||
}
|
}
|
||||||
}
|
log.Println(commodities)
|
||||||
return 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")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
log.Println(result)
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
func IsTicker(s string) bool {
|
func IsTicker(s string) bool {
|
||||||
for _, e := range s {
|
for _, e := range s {
|
||||||
if (e < 'A' || e > 'Z') && (e < '0' || e > '9') && e != '.' {
|
if (e < 'A' || e > 'Z') && (e < '0' || e > '9') && e != '.' {
|
||||||
|
|||||||
Reference in New Issue
Block a user