Heim > Backend-Entwicklung > Golang > Fscanf und das Weglassen von Feldern wie in C

Fscanf und das Weglassen von Feldern wie in C

WBOY
Freigeben: 2024-02-12 16:18:05
nach vorne
1171 Leute haben es durchsucht

Fscanf 并像 C 中那样省略字段

问题内容

是否可以像 C 中那样省略字段 %*s

var pid int
fmt.Fscanf(r, "%*s %d", &pid)
Nach dem Login kopieren

解决方法

实际上,在 Go 中你无法做到这一点(至少在 Go 1.21.0 上)。

源代码表明:

  • 格式字符串中没有省略字段的动词(如 C 语言中的 %*s):实际上,字符串的动词始终是 单个字符 (% s%v%q%X%X)
  • Fscanf 方法 迭代参数a 中的 Fscanf 数组(r io.Reader,格式字符串,a ...any))。因此,您必须a 中定义一个参数,即使您不关心它的值

如果您不想定义变量,可以使用:

var pid int
fmt.Fscanf(r, "%s %d", new(string), &pid)
Nach dem Login kopieren

其他替代方案

对于您的具体情况,要解析阅读器中的某些内容,您可以首先将阅读器读入字符串(例如 io.ReadAll):

CB835C294C06824721603abd255bd78a

然后使用 strings.Split 方法或正则表达式,例如:

  1. strings.Split
pidString := strings.Split(string(s), " ")[1]
pid, err := strconv.Atoi(pidString)
if err != nil {
    panic(err) // handle the error
}
Nach dem Login kopieren
  • 使用正则表达式:
  • re := regexp.MustCompile(`[^\s]+ (?P<pid>\d+)`) // similar to "%s %d"
    matches := re.FindStringSubmatch(s)
    pidString := matches[re.SubexpIndex("pid")]
    pid, err := strconv.Atoi(pidString)
    if err != nil {
        panic(err) // handle the error
    }
    
    Nach dem Login kopieren

    可能还有其他方法,但这些应该足以说明。希望有帮助。

    Das obige ist der detaillierte Inhalt vonFscanf und das Weglassen von Feldern wie in C. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    Quelle:stackoverflow.com
    Erklärung dieser Website
    Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
    Beliebte Tutorials
    Mehr>
    Neueste Downloads
    Mehr>
    Web-Effekte
    Quellcode der Website
    Website-Materialien
    Frontend-Vorlage