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

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

如何改善此文件的讀取代碼

如何改善此文件的讀取代碼

Go
肥皂起泡泡 2021-05-03 21:22:17
我目前有一段代碼,可以逐行讀取文件(以\ n分隔)file, _ := os.Open(filename) //deal with the error laterdefer file.Close()buf := bufio.NewReader(file)for line, err := buf.ReadString('\n'); err != io.EOF; line, err = buf.ReadString('\n'){    fmt.Println(strings.TrimRight(line, "\n"))}但是我不喜歡buf.ReadString("\n")在for循環(huán)中寫兩次,有人對改進(jìn)有任何建議嗎?
查看完整描述

2 回答

?
波斯汪

TA貢獻(xiàn)1811條經(jīng)驗 獲得超4個贊

bufio.ReadString讀取直到輸入中第一次出現(xiàn)delim為止,返回一個字符串,其中包含直到定界符(包括定界符)的數(shù)據(jù)。如果ReadString在找到定界符之前遇到錯誤,它將返回錯誤之前讀取的數(shù)據(jù)和錯誤本身(通常為io.EOF)。當(dāng)且僅當(dāng)返回的數(shù)據(jù)未以delim結(jié)尾時,ReadString才返回err!= nil。


如果buf.ReadString('\n')返回的錯誤不是io.EOF,例如bufio.ErrBufferFull,您將陷入無限循環(huán)。另外,如果文件未以結(jié)尾,則'\n'在last后面靜默忽略數(shù)據(jù)'\n'。


這是一個更強(qiáng)大的解決方案,僅執(zhí)行buf.ReadString('\n')一次。


package main


import (

    "bufio"

    "fmt"

    "io"

    "os"

    "strings"

)


func main() {

    filename := "FileName"

    file, err := os.Open(filename)

    if err != nil {

        fmt.Println(err)

        return

    }

    defer file.Close()

    buf := bufio.NewReader(file)

    for {

        line, err := buf.ReadString('\n')

        if err != nil {

            if err != io.EOF || len(line) > 0 {

                fmt.Println(err)

                return

            }

            break

        }

        fmt.Println(strings.TrimRight(line, "\n"))

    }

}


查看完整回答
反對 回復(fù) 2021-05-17
?
泛舟湖上清波郎朗

TA貢獻(xiàn)1818條經(jīng)驗 獲得超3個贊

不逐行讀取可以改善大多數(shù)逐行讀取的代碼。如果您的目標(biāo)是讀取文件并訪問行,則以下內(nèi)容通常總是更好。


package main


import (

    "fmt"

    "io/ioutil"

    "log"

    "strings"

)


func main() {

    b, err := ioutil.ReadFile("filename")

    if err != nil {

        log.Fatal(err)

    }

    s := string(b)                 // convert []byte to string

    s = strings.TrimRight(s, "\n") // strip \n on last line

    ss := strings.Split(s, "\n")   // split to []string

    for _, s := range ss {

        fmt.Println(s)

    }

}

任何錯誤都在同一時刻出現(xiàn),因此簡化了錯誤處理。如Peter所建議的那樣,在最后一行中刪除換行符可允許文件具有或不具有最后一個換行符。如今,與可用內(nèi)存相比,大多數(shù)文本文件很小,因此一口氣讀取它們是合適的。


查看完整回答
反對 回復(fù) 2021-05-17
  • 2 回答
  • 0 關(guān)注
  • 207 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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