1 回答

TA貢獻(xiàn)1828條經(jīng)驗 獲得超6個贊
只需使用兩個映射來存儲每個服務(wù)器和每個集群的總和。由于您對整個 CSV 文件不感興趣,而只對某些行感興趣,因此閱讀所有內(nèi)容有點浪費。只需跳過您不關(guān)心的行:
package main
import (
"encoding/csv"
"fmt"
"io"
"log"
"strconv"
"strings"
)
func main() {
b := `
,,,,,,,,,,CHARGE,,,,,100.00,,,,,s1.c1
,,,,,,,,,,IGNORE,,,,,,,,,,
,,,,,,,,,,CHARGE,,,,,200.00,,,,,s2.c1
,,,,,,,,,,CHARGE,,,,,300.00,,,,,s3.c2
`
r := csv.NewReader(strings.NewReader(b))
byServer := make(map[string]float64)
byCluster := make(map[string]float64)
for i := 0; ; i++ {
row, err := r.Read()
if err == io.EOF {
break
}
if err != nil {
log.Fatal(err)
}
if row[10] != "CHARGE" {
continue
}
cost, err := strconv.ParseFloat(row[15], 64)
if err != nil {
log.Fatalf("row %d: malformed cost: %v", i, err)
}
xs := strings.SplitN(row[20], ".", 2)
if len(xs) != 2 {
log.Fatalf("row %d: malformed resource name", i)
}
server, cluster := xs[0], xs[1]
byServer[server] += cost
byCluster[cluster] += cost
}
fmt.Printf("byServer: %+v\n", byServer)
fmt.Printf("byCluster: %+v\n", byCluster)
}
// Output:
// byServer: map[s2:200 s3:300 s1:100]
// byCluster: map[c1:300 c2:300]
在操場上試試:https ://play.golang.org/p/1e9mJf4LyYE
- 1 回答
- 0 關(guān)注
- 72 瀏覽
添加回答
舉報