我想弄清楚为什么我的代码无效。我希望得到一些数字和字符串,并将其分成三个切片。对于切片中的每个元素,如果它是一个字符串,则将其附加到字符串切片,如果是正数,则将其附加到正数,同样将其附加到负数。然而,这是输出
姓名: EvTremblay 45.39934611083154 -75.71148292845268
[Crestview -75.73795670904249 BellevueManor -75.73886856878032 Dutchie' sHole -75.66809864107668 ...
肯定:[45.344387632924054 45.37223315413918 ...] 否定:[]
这是我的代码。有人能告诉我导致Negatives数组没有任何值的原因吗?
func main() {
fmt.Printf("%q\n", 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])
}
}
答案 0 :(得分:1)
我上面的问题我认为可能附加在每个浮点数上的额外\ n - 如果你以换行结束你没有负面条目,或者如果你最后没有换行,你会得到一个。因此,插入一个printf,以便您可以看到从strconv.ParseFloat获得的错误,一切都将变得清晰。
可能会有所帮助的一些小问题:
例如,存储您可能需要的数据:
type Place struct {
Name string
Latitude int64
Longitude int64
}
然后将数据读入其中,具体取决于cols按给定顺序排列的事实,并将其存储在[] Place中。
答案 1 :(得分:0)
您的代码以strings
作为变量名称:
var strings []string
和strings
作为包名:
tokens := strings.Split(str, ",")
不要那样做!
strings.Split undefined (type []string has no field or method Split)
答案 2 :(得分:0)
这是我尝试过的,它现在有效!感谢大家的帮助!
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
}