115 lines
2.0 KiB
Go
115 lines
2.0 KiB
Go
package util
|
|
|
|
import (
|
|
"bufio"
|
|
"os"
|
|
"strings"
|
|
)
|
|
|
|
func parseJsonToFloats(s string) []float64 {
|
|
s = strings.TrimLeft(s, "[")
|
|
s = strings.TrimRight(s, "]")
|
|
s = strings.ReplaceAll(s, "\n", "")
|
|
|
|
tokens := strings.Split(s, " ")
|
|
res := []float64{}
|
|
for _, token := range tokens {
|
|
if token == "" {
|
|
continue
|
|
}
|
|
|
|
f := ParseFloat(token)
|
|
res = append(res, f)
|
|
}
|
|
return res
|
|
}
|
|
|
|
func LoadVectorFileByCsv(path string) ([]string, [][]float64) {
|
|
nameArray := []string{}
|
|
dataArray := [][]float64{}
|
|
|
|
file, err := os.Open(path)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
defer file.Close()
|
|
|
|
rows := [][]string{}
|
|
LoadCsvFile(path, &rows)
|
|
|
|
for _, row := range rows {
|
|
if row[0] == "" {
|
|
continue
|
|
}
|
|
|
|
nameArray = append(nameArray, row[1])
|
|
dataArray = append(dataArray, parseJsonToFloats(row[2]))
|
|
}
|
|
|
|
return nameArray, dataArray
|
|
}
|
|
|
|
func LoadVectorFileByCsv2(path string) ([]string, [][]float64) {
|
|
nameArray := []string{}
|
|
dataArray := [][]float64{}
|
|
|
|
file, err := os.Open(path)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
defer file.Close()
|
|
|
|
rows := [][]string{}
|
|
LoadCsvFile(path, &rows)
|
|
|
|
for _, row := range rows {
|
|
nameArray = append(nameArray, row[0])
|
|
dataArray = append(dataArray, StringsToFloats(row[1:]))
|
|
}
|
|
|
|
return nameArray, dataArray
|
|
}
|
|
|
|
func LoadVectorFileBySpace(path string) ([]string, [][]float64) {
|
|
nameArray := []string{}
|
|
dataArray := [][]float64{}
|
|
|
|
file, err := os.Open(path)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
defer file.Close()
|
|
|
|
scanner := bufio.NewScanner(file)
|
|
const maxCapacity = 1024 * 1024 * 8
|
|
buf := make([]byte, maxCapacity)
|
|
scanner.Buffer(buf, maxCapacity)
|
|
i := 0
|
|
for scanner.Scan() {
|
|
if i == 0 {
|
|
i += 1
|
|
continue
|
|
}
|
|
|
|
line := scanner.Text()
|
|
|
|
line = strings.Trim(line, " ")
|
|
tokens := strings.Split(line, " ")
|
|
nameArray = append(nameArray, tokens[0])
|
|
|
|
data := []float64{}
|
|
for j := 1; j < len(tokens); j++ {
|
|
data = append(data, ParseFloat(tokens[j]))
|
|
}
|
|
dataArray = append(dataArray, data)
|
|
|
|
i += 1
|
|
}
|
|
|
|
if err = scanner.Err(); err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
return nameArray, dataArray
|
|
}
|