Aide Sscanf
Résolu
MaisClement
Messages postés
5
Statut
Membre
-
MaisClement Messages postés 5 Statut Membre -
MaisClement Messages postés 5 Statut Membre -
Bonjour,
Depuis maintenant quelques jours, je suis bloqué sur la fonction Sscanf :
J'aimerais récupérer le nom de la ville ainssi que les heures : 18:10,
Si des personnes peuvent m'aidez,
Depuis maintenant quelques jours, je suis bloqué sur la fonction Sscanf :
char s[] = "Dreux (Dreux)/20190513T181000/20190513T181000/";
String dest0;
int h0, m0, s0, hb0, mb0, sb0;
String n1, n2;
sscanf(s, "%s(%sT%2d%2d%2d%sT%2d%2d%2d/", dest0, n1, h0, m0, s0, n2, hb0, mb0, sb0);
J'aimerais récupérer le nom de la ville ainssi que les heures : 18:10,
Si des personnes peuvent m'aidez,
1 réponse
-
Bonjour
%s ça lit une séquence de caractère jusqu'au prochain espace ou équivalent. donc ici "%s(%s" va lire dans dest0 : "Dreux" et dans n1 : "Dreux)/20190513T181000/20190513T181000/"
et donc les formats suivants n'auront plus rien à lire.
Et c'est quoi ce type String?
Et ici il y a 2 noms de ville il faut récupérer lequel?
On pourrait écrire :sscanf(s, "%[^(]%*[^)]%*[^T]T%2d%2d%*[^T]T%2d%2d" , dest0 , h0 , m0, hb0, mb0); // "%[^(]" va lire une chaîne tant qu'il n'y a pas '(' // "%*[^)]" va lire tant que pas ')' sans rien stocker // "%*[^T]" va lire tant que pas 'T' sans rien stocker // "T" s'attend à lire un T // "%2d" lit un entier sur exactement 2 chiffresAttention le nom de ville récupéré ici aura peut-être des espaces en trop au début et la fin, il faudrait les ôter.-
Super ! On pourrait aussi vérifier la présence des slashs, que les 8 caractères précédant le T sont bien des chiffres et qu'après les minutes il y a bien des secondes (au moins pour le premier timestamp, ou capturer aussi le dernier slash pour se donner les moyens de faire une vérification jusqu'au bout), et vérifier que l'on obtient bien le nombre attendu de variables (la valeur de retour de
sscanf
).
Même si le reste de la description de chaîne n'est pas capturé, si le but n'est pas seulement de capturer les informations dont on a besoin, mais aussi de valider que le format de ce que l'on traite semble cohérent, on pourra alors décider quoi faire si les vérifications de cohérence ne passent pas (avertir l'utilisateur et tenter une capture dégradée, arrêter le programme, la source de données étant jugée suspecte,...).
Aussi, sih0 , m0, hb0, mb0
sont desint
, comme dans les lignes postées par MaisClement, il faudra inclure en paramètre desscanf
l'adresse de ces variables&h0 , &m0, &hb0, &mb0
pour quesscanf
stocke le contenu dans l'espace mémoire alloué à la variable. -
-