关于

Golang parse array

我正试图弄明白我的代码为什么不能工作。我想把数字和字符串分成三部分。对于切片中的每个元素,如果它是字符串,则将其附加到字符串切片;如果它是正数,则将其附加到正数,同样也将其附加到负数。然而,这里是输出

姓名:埃夫特林贝45.39934611083154号-75.71148292845268

[风景-75.73795670904249贝尔维埃曼-75.73886856878032杜奇索-75.66809864107668…

阳性:[45.344387632924054 45.37223315413918…]底片:[]

这是我的密码。有人能告诉我是什么导致负数数组没有任何值吗?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
func main() {
    fmt.Printf("%q
", strings.Split("a,b,c",","))
    var names []string
    var positives, negatives []float64
    bs, err := ioutil.ReadFile("poolss.txt")
    if err != nil {
        return
    }
    str := string(bs)
    fmt.Println(str)
    tokens := strings.Split(str,",")
    for _, token := range tokens {
        if num, err := strconv.ParseFloat(token, 64); err == nil {
            if num > 0 {
                positives = append(positives, num)
            } else {
                negatives = append(negatives, num)
            }

        } else {
            names = append(names, token)
        }

    fmt.Println(token)
    }

    fmt.Println(fmt.Sprintf("Strings: %v",names))
    fmt.Println(fmt.Sprintf("Positives: %v", positives))
    fmt.Println(fmt.Sprintf("Negatives: %v",negatives))
    for i := range names{
        fmt.Println(names[i])

        fmt.Println(positives[i])

        fmt.Println(negatives[i])
    }
}


上面的问题可能在于每个浮动附加的额外项-如果以换行符结尾,则不会得到负项,如果结尾没有换行符,则会得到负项。所以插入一个printf,这样您就可以看到strconv.parsefloat中的错误,所有的错误都会变得清晰。

可能有助于:

  • 检查错误,不要依赖于一个错误只有一种类型(这会使您在这里感到困惑)-如果错误到达,请始终打印它,特别是在调试时。
  • 不要为变量(字符串)使用包的名称,它不会很好地结束。
  • 使用反映数据的数据结构
  • 使用csv包读取csv数据
  • 小精灵

    例如,为了存储您可能需要的数据:

    1
    2
    3
    4
    5
    type Place struct {
       Name string
       Latitude int64
       Longitude int64
    }

    然后根据cols是按给定顺序排列的这一事实将数据读入其中,并将其存储在[]位置。


    这是我试过的,现在可以用了!谢谢大家的帮助!

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    func main() {
    findRoute("poolss.csv", 5)
     }

    func findRoute( filename string, num int) []Edge {
    var route []Edge
    csvFile, err := os.Open(filename)
    if err != nil {
        return route
    }
    reader := csv.NewReader(bufio.NewReader(csvFile))
    var pools []Pool
    for {
        line, error := reader.Read()
        if error == io.EOF {
            break
        } else if error != nil {
            log.Fatal(error)
        }
        lat, err := strconv.ParseFloat(line[1], 64)
        long, err := strconv.ParseFloat(line[2], 64)
        if err == nil {
            pools = append(pools, Pool{
                name: line[0],
                latitude:  lat,
                longitude: long,
            })
        }
    }
    return route
    }


    您的代码使用strings作为变量名:

    1
    var strings []string

    strings作为包名:

    1
    tokens := strings.Split(str,",")

    别这样!

    1
    strings.Split undefined (type []string has no field or method Split)

    游乐场:https://play.golang.org/p/hfzgj0jot-p