亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

如何循環遍歷包含多個數字的行的文本文件,同時對數字進行計數

如何循環遍歷包含多個數字的行的文本文件,同時對數字進行計數

Go
陪伴而非守候 2023-06-26 17:57:59
該文件看起來像:John Smith100 90 80 9050 60 80 99 40 20但文件中可以有任意數量的人員/等級。我知道如何循環并獲取該人的名字和姓氏,但是如何循環第一行數字,將它們添加到自己的總計中,然后循環第二行并將它們添加到另一個總計中?我還沒有找到一種方法來檢查Go中的行尾,所以我不知道如何區分第一行數字和第二行數字。這是我嘗試過的:package mainimport (    "fmt"     "os"    "log"    "bufio"    //"unicode"    //"container/list")type Student struct {    FirstName string    LastName string}func main(){    fmt.Println("What is the name of your file?\n")    var filename string    fmt.Scan(&filename)    file, err := os.Open(filename)    if err != nil {        log.Fatal(err)    }    scanner := bufio.NewScanner(file)    scanner.Split(bufio.ScanWords)    //var scanCount int = 0    //var studentCount = 1    //var gradeSum = 0    //var gradeAvg = 0    var students [100]Student    for scanner.Scan() {        students[0].FirstName = scanner.Text()        students[0].LastName = scanner.Text()        fmt.Println(students[0].FirstName)        //count ++    }}這是我到目前為止所擁有的。我嘗試過的所有涉及數字的方法都不起作用,所以我將其刪除了。
查看完整描述

1 回答

?
慕標琳琳

TA貢獻1830條經驗 獲得超9個贊

最簡單的方法是按行循環遍歷文件。像這樣的東西:


package main


import (

    "bufio"

    "fmt"

    "log"

    "strconv"

    "strings"

)


type Student struct {

    FirstName string

    LastName  string

}


func main() {

    fmt.Println("What is the name of your file?\n") var filename string 

    fmt.Scan(&filename)


    file, err := os.Open(filename)

    if err != nil {

     log.Fatal(err)

    }

    scanner := bufio.NewScanner(file)

    for scanner.Scan() {

        line := scanner.Text()

        if len(line) == 0 {

            // skip blank lines

            continue

        }

        if '0' <= line[0] && line[0] <= '9' {

            sum := 0

            for _, field := range strings.Fields(line) {

                n, err := strconv.Atoi(field)

                if err != nil {

                    log.Fatal(err)

                }

                sum += n

            }

            fmt.Println(sum)

        } else {

            fields := strings.Fields(line)

            if len(fields) != 2 {

                log.Fatal("don't know how to get first name last name")

            }

            fmt.Println("First:", fields[0], "Last:", fields[1])

        }

    }

    if err := scanner.Err(); err != nil {

        log.Fatal(err)

    }

}

在游樂場上看到它



查看完整回答
反對 回復 2023-06-26
  • 1 回答
  • 0 關注
  • 179 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號