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

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

當(dāng)我使用 fmt.Fscanf 時,為什么會出現(xiàn)“輸入與格式不匹配”??的情況?

當(dāng)我使用 fmt.Fscanf 時,為什么會出現(xiàn)“輸入與格式不匹配”??的情況?

Go
達令說 2023-07-04 19:06:51
我正在嘗試使用fmt.Fscanf,但我很難弄清楚如何使用。有以下代碼:package mainimport (    "fmt"    "strings")func main() {    var host, user, date, httpStr string    var code, size int    r := strings.NewReader(`127.0.0.1 - james [09/May/2018:16:00:39 +0000] "GET /report HTTP/1.0" 200 123`)    _, err := fmt.Fscanf(r, `%s - %s [%s], "%s" %d %d`,        &host, &user, &date, &httpStr, &code, &size)    if err != nil {        fmt.Printf("Failed to parse log line, error: %+v\n", err)        panic(err)    }    fmt.Println(host, user, date, httpStr, code, size)}去游樂場:https://play.golang.org/p/zGxc6MXOF3a我得到:Failed to parse log line, error: input does not match formatpanic: input does not match formatgoroutine 1 [running]:main.main()        .../fscanf/main.go:19 +0x57bexit status 2為什么?
查看完整描述

1 回答

?
慕工程0101907

TA貢獻1887條經(jīng)驗 獲得超5個贊

該錯誤來自如何Fscanf解析空格分隔的字符串。讀取日期和 HTTP 字符串時,這會成為一個問題:

當(dāng)它讀取日期時,09/May/2018:16:00:39 +0000它不會讀取日期,而是會讀取直到第一個空格:09/May/2018:16:00:39然后是expect?]。

要解決此問題,將字符串解析為 是有意義的[%s %s],但這會更巧妙地失敗。它將解析時區(qū),+0000]因為它停在第一個空格處,而不是根據(jù)格式字符串。HTTP 字符串也會出現(xiàn)同樣的問題:它在動詞之后停止解析GET,然后在路由之后停止/report解析,但是在讀取協(xié)議時它讀取HTTP/1.0"not?HTTP/1.0

一個可行的解決方案如下:

package main


import (

? ? "fmt"

? ? "log"

? ? "strings"

)


func main() {

? ? var host, user, date, tzOffset, verb, route, proto string

? ? var code, size int


? ? r := strings.NewReader(`127.0.0.1 - james [09/May/2018:16:00:39 +0000] "GET /report HTTP/1.0" 200 123`)


? ? _, err := fmt.Fscanf(r, `%s - %s %s %s %s %s %s %d %d`,

? ? ? ? &host, &user, &date, &tzOffset, &verb, &route, &proto, &code,

? ? ? ? &size)


? ? if err != nil {

? ? ? ? log.Fatal(err)

? ? }


? ? date = date[1:] + " " + tzOffset[:len(tzOffset)-1]

? ? httpString := verb[1:] + " " + route + " " + proto[:len(proto)-1]


? ? fmt.Println(host, user, date, httpString, code, size)

}

這里,我們在解析時忽略日期和 HTTP 字符串周圍的括號和引號,然后將其刪除。


輸出:


127.0.0.1 james 09/May/2018:16:00:39 +0000 GET /report HTTP/1.0 200 123


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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