Maison >développement back-end >Golang >Fscanf et en omettant des champs comme en C

Fscanf et en omettant des champs comme en C

WBOY
WBOYavant
2024-02-12 16:18:051179parcourir

Fscanf 并像 C 中那样省略字段

Contenu de la question

Est-il possible d'omettre des champs %*s comme en C ?

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

Solution de contournement

En fait, vous ne pouvez pas faire cela dans Go (du moins sur Go 1.21.0).

Le code source indique :

  • Il n'y a pas de verbe de champs omis dans la chaîne de format (comme %*s):实际上,字符串的动词始终是 单个字符 (% s%v%q%X%X en langage C) : en fait, le verbe de la chaîne est toujours Caractère unique
  • (% s, %v, %q, %X ou %X)
  • Fscanf 方法 迭代参数a 中的 Fscanf 数组(r io.Reader,格式字符串,a ...any))。因此,您必须aFscanf
  • MéthodeItérerParamètres
(Fscanf array(r io.Reader, format string, a...any) dans <code>a). Par conséquent, vous devez définir un paramètre dans a même si vous ne vous souciez pas de sa valeur

Si vous ne souhaitez pas définir de variables, vous pouvez utiliser :

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

Autres alternativesio.ReadAll

Pour votre cas spécifique, pour analyser quelque chose dans le lecteur, vous pouvez d'abord lire le lecteur dans une chaîne (par exemple

) : strings.Split CB835C294C06824721603abd255bd78a

Utilisez ensuite la méthode
    ou l'expression régulière, par exemple :
  1. strings.Split
  2. avec
  1. pidString := strings.Split(string(s), " ")[1]
    pid, err := strconv.Atoi(pidString)
    if err != nil {
        panic(err) // handle the error
    }
    
Utilisez des expressions régulières :

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
}
🎜Il existe peut-être d'autres moyens, mais ceux-ci devraient suffire. J'espère que cela pourra aider. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer