|
- // Copyright 2023 The casbin Authors. All Rights Reserved.
- //
- // Licensed under the Apache License, Version 2.0 (the "License");
- // you may not use this file except in compliance with the License.
- // You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS IS" BASIS,
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- // See the License for the specific language governing permissions and
- // limitations under the License.
-
- 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 LoadFactorFileByCsv(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 LoadFactorFileByCsv2(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 LoadFactorFileBySpace(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
- }
|