Table des matières

scan

Analyse une chaîne en utilisant des spécificateurs de conversion dans le style de sscanf

Syntaxe

scan string format ?varName varName ...?

Description

Cette commande analyse les champs à partir d'une chaîne d'entrée de la même façon que la fonction ANSI C sscanf et retourne un compte du nombre de conversions effectuées, ou -1 si la fin de la chaîne d'entrée est atteinte avant qu'une conversion ait été effectuée String donne l'entrée a analyser et format indique comment l'analyser, en utilisant les spécificateurs de conversions % comme dans sscanf. Chaque varName donne le nom d'une variable; quand un champ est scanné à partir de string le résultat est converti en une chaîne et assigné à la variable correspondante. Si aucunes variables varName ne sont spécifiées, alors scan fonctionne d'une manière linéaire, retournant les données qui seraient autrement stockées dans les variables comme une liste. Dans le cas linéaire, une chaîne vide est renvoyée quand la fin de la chaîne d'entrée est atteinte avant qu'une conversion ait été effectuée

Détails sur le scanning

Scan opère en scannant string et format ensemble. Si le caractère suivant dans format est un espace ou une tabulation alors il correspond à un nombre quelconque d'espaces dans string (incluant zéro). Autrement, si ce n'est pas un caractère % alors il doit correspondre au caractère suivant de string. Quand un % est rencontrée dans format, il indique le début d'un spécificateur de conversion. Un spécificateur de conversion contient jusqu’à quatre champs après le %: une [24], indique que la valeur convertie est écartée au lieu d'être assignée à une variable; un spécificateur de position XPG3; un nombre indiquant une largeur de champ maximum; et un caractère de conversion. Tous ces champs sont optionnels excepté le caractère de conversion. Les champs présents doivent apparaître dans l'ordre indiqué plus haut.

Quand scan trouve un spécificateur de conversion dans format, il saute en premier tout espace dans string (à moins que le spécificateur soit [ ou c). Ensuite il convertit les caractères d'entrée suivants en accord avec le spécificateur de conversion et range le résultat dans la variable désignée par l'argument suivant à scan.

Si le % est suivi par un nombre décimal et un $, comme dans “%2$d”, alors la variable à utiliser n'est pas extraite de l'argument suivant. Contrairement, elle est extraite de l'argument indiqué par le nombre, where 1 corresponds à la première varName. Si il y a un quelconque spécificateur de position dans format alors tous les spécificateurs doivent être positionnels. Toutes les varName sur la liste d'arguments doivent correspondre exactement à un spécificateur de conversion ou une erreur est générée, ou dans le cas linéaire, toute position peut être spécifiée au moins une fois et les positions vides seront remplies avec des chaînes vides.

Les caractères de conversions suivants sont supportés:

Le nombre de caractères lus de l'entrée pour conversion est le plus grand nombre qui a un sens pour cette conversion (ex. le plus grand nombre de chiffres décimaux possibles pour %d, le plus grand nombre de chiffres octaux possibles pour %o, et ainsi de suite). Le champ d'entrée pour une conversion donnée se termine soit quand un espace est rencontré ou quand la largeur maximum de champ a été atteinte, suivant lequel est rencontré en premier. Si une * est présente dans le spécificateur de conversion alors aucune variable n'est assignée et l'argument suivant n'est pas utilisé

Différences avec SSCANF

Le comportement de la commande scan est le même que celui de la fonction ANSI C sscanf excepté les différences suivantes:

  1. Le spécificateur de conversion %p n'est pas supporté.
  2. Pour les conversions %c une seule valeur caractère est convertie en chaîne décimale, qui est alors assignée à la correspondante varName; aucune largeur de champ ne peut être spécifiée pour cette conversion.
  3. Les modificateurs l, h, et L sont ignorés; les valeurs entières sont toujours converties comme s'il n'y avait pas de modificateur présent et les valeurs réelles sont toujours converties comme si le modificateur l était présent (ex. le type double est utilisé pour la représentation interne).
  4. Si la fin de la chaîne d'entrée est atteinte avant que quelconque conversion ait été effectuée et qu'aucune variable n'ait été donnée, une chaîne vide est renvoyée

Exemples

Voir aussi