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

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

golang:逐行讀取 int 字符串的文本文件

golang:逐行讀取 int 字符串的文本文件

Go
喵喔喔 2021-09-20 20:40:00
我正在處理一個包含整數列表作為字符串的輸入文件10..我選擇使用ReadString('\n')方法逐行閱讀以下代碼line, error := inputReader.ReadString('\n')lineStr := string(line)控制臺輸出(長度和值)lineStr %v 4lineStr %v 10lineStr 長度為“4”,可能是因為符文編碼。然后我嘗試了幾種方法將它轉換為簡單的整數,但沒有成功。例1num, _ := strconv.ParseUint(lineStr, 0, 64)輸出數字 0(應該是 10)例2num, _ := strconv.Atoi(lineStr)輸出數字 0(應該是 10)例3num, _ := strconv.Atoi("10")輸出數量為 10 (ok)Ex4num, _ := strconv.ParseUint("10", 0, 64)輸出數量為 10 (ok)文字中的字符串沒問題,但文件中的字符串不起作用,有什么問題?提前致謝
查看完整描述

3 回答

?
開滿天機

TA貢獻1786條經驗 獲得超13個贊

來自文檔:“ReadString 讀取直到輸入中第一次出現 delim,返回一個包含數據的字符串,直到并包括分隔符?!?/p>


因此,我建議您使用掃描儀,它可以像您期望的那樣處理這種情況:


scanner := bufio.NewScanner(file)

for scanner.Scan() {

    lineStr := scanner.Text()

    num, _ := strconv.Atoi(lineStr)

    fmt.Println(lineStr, num)

}


查看完整回答
反對 回復 2021-09-20
?
ABOUTYOU

TA貢獻1812條經驗 獲得超5個贊

引用bufio.Reader.ReadString的文檔(強調我的):


ReadString 讀取直到輸入中第一次出現 delim ,返回一個包含數據的字符串,直到并包括 delimiter。


現在,strconv.ParseInt的文檔


ParseInt 返回的錯誤具有具體類型 *NumError 并包括 err.Num = s。如果 s 為空或包含無效數字,則 err.Err = ErrSyntax 返回值為 0


您的問題是該ReadString方法還返回\n終止該行的 ,這是該ParseInt函數的無效字符。


您可以使用以下代碼段檢查真正的錯誤


i, err := strconv.ParseInt(line, 10, 64)

if err != nil {

    switch err.(*strconv.NumError).Err {

        case strconv.ErrSyntax:

            fmt.Println("syntax error")

        case strconv.ErrRange:

            fmt.Println("out of range value")

    }

}

建議:用于strings.TrimSpace清理您的輸入。


查看完整回答
反對 回復 2021-09-20
?
慕婉清6462132

TA貢獻1804條經驗 獲得超2個贊

如果您查看文檔,ReadString您會注意到string返回的將包含分隔符(在您的情況下\n)。

ReadString 讀取直到輸入中第一次出現 delim 為止,返回一個包含數據的字符串,直到并包括分隔符。

并且因為讀取 10 后的行長度為 4,所以我假設這些行由\r\n. 刪除它的最簡單方法是使用其中一個Trim函數(如TrimSpace)。


查看完整回答
反對 回復 2021-09-20
  • 3 回答
  • 0 關注
  • 354 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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