第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

總結(jié)csv的內(nèi)容

總結(jié)csv的內(nèi)容

Go
繁華開滿天機 2023-03-21 15:18:43
上下文 我正在創(chuàng)建一個小程序,該程序可以匯總 csv 格式的絕對混亂的賬單的內(nèi)容。該法案包含我感興趣的三列:事件類型。在這里,我只對該列顯示為 CHARGE 的行感興趣成本。自我解釋。資源名稱,包含服務(wù)器和集群名稱。格式為服務(wù)器名.集群名。這個想法是選擇標(biāo)記為費用的行,首先按集群拆分它們,然后按服務(wù)器名稱拆分它們,然后對每個行的總成本求和。我不禁覺得這應(yīng)該很容易,但我已經(jīng)為此撓頭了一段時間,而且似乎無法弄清楚。在這一點上,我應(yīng)該聲明我對編程還很陌生,對 GO 也是全新的。這是我到目前為止所擁有的:package mainimport (    "encoding/csv"    "log"    "os"    "sort"    "strings")func main() {    rows := readBill("bill-2018-April.csv")    rows = calculateSummary(rows)    writeSummary("bill-2018-April-output", rows)}func readBill(name string) [][]string {    f, err := os.Open(name)    if err != nil {        log.Fatalf("Cannot open '%s': %s\n", name, err.Error())    }    defer f.Close()    r := csv.NewReader(f)    rows, err := r.ReadAll()    if err != nil {        log.Fatalln("Cannot read CSV data:", err.Error())    }    return rows}type charges struct {    impactType string    cost       float64    resName    string}func createCharges(rows [][]string){    charges:= []charges{}    for i,r:=range rows {        var c charges        c.impactType :=r [i][10]        c.cost := r [i][15]        c.resName := r [i][20]        charges = append()    }    return charges} 因此,據(jù)我所知,我現(xiàn)在應(yīng)該已經(jīng)分離出我感興趣的列(即第 10、15 和 20 列)。到目前為止我所擁有的是正確的嗎?我將如何挑出顯示為“CHARGE”的行并按集群和服務(wù)器劃分所有內(nèi)容?總結(jié)起來應(yīng)該不會太棘手,但無論出于何種原因,這真的讓我很困惑。
查看完整描述

1 回答

?
30秒到達(dá)戰(zhàn)場

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


查看完整回答
反對 回復(fù) 2023-03-21
  • 1 回答
  • 0 關(guān)注
  • 72 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號