J'ai une petite question qui m'agace; j'ai fait autrement, mais ça
m'énerve de ne pas avoir la réponse.
A propos de sscanf, je lis dans la doc Nexen (les explications de sscanf
sont à chercher dans sprintf), que l'on peut définir un autre
séparateur que l'espace, pour exemple, ils mettent ceci :
printf("[%'#10s]\n", $s);
pour une variable quelconque $s.
Ce qui correspond à l'explication littérale qu'il donne pour le
caractère d'espacement, puisqu'ils disent qu'il doit être préfixé d'un "'".
Or, si j'essaye avec sscanf, j'ai droit à une belle erreur de php qui ne
comprend pas l'argument.
Comment faites-vous pour préciser un caractère d'espacement différent
avec sscanf (si c'est possible)?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Olivier Miakinen
A propos de sscanf, je lis dans la doc Nexen (les explications de sscanf sont à chercher dans sprintf), que l'on peut définir un autre séparateur que l'espace, pour exemple, ils mettent ceci :
printf("[%'#10s]n", $s);
pour une variable quelconque $s.
Oui. Attention, dans la doc en français (en tout cas celle que l'on trouve sur www.php.net) il y a une erreur. Ils ont oublié le « sign specifier » (spécificateur de signe) et le « padding specifier » a été indiqué deux fois, une fois sous le nom de spécificateur d'espacement et une fois sous le nom de remplisseur.
Ce qui correspond à l'explication littérale qu'il donne pour le caractère d'espacement, puisqu'ils disent qu'il doit être préfixé d'un "'".
En fait, la bonne traduction est plutôt « remplisseur ». Il s'agit de savoir par quoi on remplit un champ lorsque la valeur est plus petite que l'espace dont on dispose. Souvent c'est par des espaces, quelquefois par des 0 pour les nombres, et sinon on peut mettre ce qu'on veut grâce à cette syntaxe.
Curieusement, cela semble être particulier au sprintf de PHP, inconnu des syntaxes de sprintf() en C : <http://www.google.fr/search?q=man+sprintf+%22padding+specifier%22>
Or, si j'essaye avec sscanf, j'ai droit à une belle erreur de php qui ne comprend pas l'argument.
Très certainement parce que l'argument n'existe que pour sprintf. D'ailleurs le traitement des caractères blancs dans sscanf se fait en dehors des séquences %-quelque-chose, je ne vois pas bien comment une spécification de conversion pourrait influer sur le traitement des séparateurs avant et après.
Comment faites-vous pour préciser un caractère d'espacement différent avec sscanf (si c'est possible)?
J'ai cherché partout, rien trouvé.
Tu sais combien il y a de tels caractères à chaque fois ? Si oui, c'est facile : tu les mets tels quels dans la chaîne. Sinon, utilise plutôt preg_match(), preg_replace(), strtok(), split(), preg_split(), explode() et ainsi de suite.
Un exemple du premier cas : pour extraire les nombres dans "##32#10###9" tu peux utiliser "##%d#%d###%d".
A propos de sscanf, je lis dans la doc Nexen (les explications de sscanf
sont à chercher dans sprintf), que l'on peut définir un autre
séparateur que l'espace, pour exemple, ils mettent ceci :
printf("[%'#10s]n", $s);
pour une variable quelconque $s.
Oui. Attention, dans la doc en français (en tout cas celle que l'on
trouve sur www.php.net) il y a une erreur. Ils ont oublié le « sign
specifier » (spécificateur de signe) et le « padding specifier » a été
indiqué deux fois, une fois sous le nom de spécificateur d'espacement
et une fois sous le nom de remplisseur.
Ce qui correspond à l'explication littérale qu'il donne pour le
caractère d'espacement, puisqu'ils disent qu'il doit être préfixé d'un "'".
En fait, la bonne traduction est plutôt « remplisseur ». Il s'agit de
savoir par quoi on remplit un champ lorsque la valeur est plus petite
que l'espace dont on dispose. Souvent c'est par des espaces, quelquefois
par des 0 pour les nombres, et sinon on peut mettre ce qu'on veut grâce
à cette syntaxe.
Curieusement, cela semble être particulier au sprintf de PHP, inconnu
des syntaxes de sprintf() en C :
<http://www.google.fr/search?q=man+sprintf+%22padding+specifier%22>
Or, si j'essaye avec sscanf, j'ai droit à une belle erreur de php qui ne
comprend pas l'argument.
Très certainement parce que l'argument n'existe que pour sprintf.
D'ailleurs le traitement des caractères blancs dans sscanf se fait
en dehors des séquences %-quelque-chose, je ne vois pas bien comment
une spécification de conversion pourrait influer sur le traitement
des séparateurs avant et après.
Comment faites-vous pour préciser un caractère d'espacement différent
avec sscanf (si c'est possible)?
J'ai cherché partout, rien trouvé.
Tu sais combien il y a de tels caractères à chaque fois ? Si oui, c'est
facile : tu les mets tels quels dans la chaîne. Sinon, utilise plutôt
preg_match(), preg_replace(), strtok(), split(), preg_split(), explode()
et ainsi de suite.
Un exemple du premier cas : pour extraire les nombres dans "##32#10###9"
tu peux utiliser "##%d#%d###%d".
A propos de sscanf, je lis dans la doc Nexen (les explications de sscanf sont à chercher dans sprintf), que l'on peut définir un autre séparateur que l'espace, pour exemple, ils mettent ceci :
printf("[%'#10s]n", $s);
pour une variable quelconque $s.
Oui. Attention, dans la doc en français (en tout cas celle que l'on trouve sur www.php.net) il y a une erreur. Ils ont oublié le « sign specifier » (spécificateur de signe) et le « padding specifier » a été indiqué deux fois, une fois sous le nom de spécificateur d'espacement et une fois sous le nom de remplisseur.
Ce qui correspond à l'explication littérale qu'il donne pour le caractère d'espacement, puisqu'ils disent qu'il doit être préfixé d'un "'".
En fait, la bonne traduction est plutôt « remplisseur ». Il s'agit de savoir par quoi on remplit un champ lorsque la valeur est plus petite que l'espace dont on dispose. Souvent c'est par des espaces, quelquefois par des 0 pour les nombres, et sinon on peut mettre ce qu'on veut grâce à cette syntaxe.
Curieusement, cela semble être particulier au sprintf de PHP, inconnu des syntaxes de sprintf() en C : <http://www.google.fr/search?q=man+sprintf+%22padding+specifier%22>
Or, si j'essaye avec sscanf, j'ai droit à une belle erreur de php qui ne comprend pas l'argument.
Très certainement parce que l'argument n'existe que pour sprintf. D'ailleurs le traitement des caractères blancs dans sscanf se fait en dehors des séquences %-quelque-chose, je ne vois pas bien comment une spécification de conversion pourrait influer sur le traitement des séparateurs avant et après.
Comment faites-vous pour préciser un caractère d'espacement différent avec sscanf (si c'est possible)?
J'ai cherché partout, rien trouvé.
Tu sais combien il y a de tels caractères à chaque fois ? Si oui, c'est facile : tu les mets tels quels dans la chaîne. Sinon, utilise plutôt preg_match(), preg_replace(), strtok(), split(), preg_split(), explode() et ainsi de suite.
Un exemple du premier cas : pour extraire les nombres dans "##32#10###9" tu peux utiliser "##%d#%d###%d".
michel
Le Sat, 18 Nov 2006 22:02:51 +0000, Olivier Miakinen a écrit :
... Oui. Attention, dans la doc en français (en tout cas celle que l'on trouve sur www.php.net) il y a une erreur. Ils ont oublié le « sign specifier » (spécificateur de signe) et le « padding specifier » a été indiqué deux fois, une fois sous le nom de spécificateur d'espacement et une fois sous le nom de remplisseur. ... En fait, la bonne traduction est plutôt « remplisseur ». Il s'agit de savoir par quoi on remplit un champ lorsque la valeur est plus petite que l'espace dont on dispose. Souvent c'est par des espaces, quelquefois par des 0 pour les nombres, et sinon on peut mettre ce qu'on veut grâce à cette syntaxe. ... Bon, il y a bien une erreur; ça me turlupinait la moelle épinière.
Curieusement, cela semble être particulier au sprintf de PHP, inconnu des syntaxes de sprintf() en C : <http://www.google.fr/search?q=man+sprintf+%22padding+specifier%22> ...
Dus peu de connaissances en C qu'il me reste, je confirme.
Très certainement parce que l'argument n'existe que pour sprintf. D'ailleurs le traitement des caractères blancs dans sscanf se fait en dehors des séquences %-quelque-chose, je ne vois pas bien comment une spécification de conversion pourrait influer sur le traitement des séparateurs avant et après.
Contrairement à ce qui est indiqué dans la doc qui dit que les arguments
sont à trouver à la rubrique sprintf et sont les mêmes que pour sscanf. ...
Tu sais combien il y a de tels caractères à chaque fois ? Si oui, c'est facile : tu les mets tels quels dans la chaîne. Sinon, utilise plutôt preg_match(), preg_replace(), strtok(), split(), preg_split(), explode() et ainsi de suite.
Un exemple du premier cas : pour extraire les nombres dans "##32#10###9" tu peux utiliser "##%d#%d###%d".
C'est bon, j'ai fait autrement. Ma chaîne commence dans certains cas par un "#", et je fais juste un test par une expression régulière sur le premier caractère, , je l'ôte par substr (euh si je me souviens bien), et je la traite en fonction de ce cas déterminé.
Merci beaucoup, j'ai mes réponses.
Michel
Le Sat, 18 Nov 2006 22:02:51 +0000, Olivier Miakinen a écrit :
...
Oui. Attention, dans la doc en français (en tout cas celle que l'on
trouve sur www.php.net) il y a une erreur. Ils ont oublié le « sign
specifier » (spécificateur de signe) et le « padding specifier » a été
indiqué deux fois, une fois sous le nom de spécificateur d'espacement
et une fois sous le nom de remplisseur.
...
En fait, la bonne traduction est plutôt « remplisseur ». Il s'agit de
savoir par quoi on remplit un champ lorsque la valeur est plus petite
que l'espace dont on dispose. Souvent c'est par des espaces, quelquefois
par des 0 pour les nombres, et sinon on peut mettre ce qu'on veut grâce
à cette syntaxe.
...
Bon, il y a bien une erreur; ça me turlupinait la moelle épinière.
Curieusement, cela semble être particulier au sprintf de PHP, inconnu
des syntaxes de sprintf() en C :
<http://www.google.fr/search?q=man+sprintf+%22padding+specifier%22>
...
Dus peu de connaissances en C qu'il me reste, je confirme.
Très certainement parce que l'argument n'existe que pour sprintf.
D'ailleurs le traitement des caractères blancs dans sscanf se fait
en dehors des séquences %-quelque-chose, je ne vois pas bien comment
une spécification de conversion pourrait influer sur le traitement
des séparateurs avant et après.
Contrairement à ce qui est indiqué dans la doc qui dit que les arguments
sont à trouver à la rubrique sprintf et sont les mêmes que pour
sscanf.
...
Tu sais combien il y a de tels caractères à chaque fois ? Si oui,
c'est facile : tu les mets tels quels dans la chaîne. Sinon, utilise
plutôt preg_match(), preg_replace(), strtok(), split(), preg_split(),
explode() et ainsi de suite.
Un exemple du premier cas : pour extraire les nombres dans "##32#10###9"
tu peux utiliser "##%d#%d###%d".
C'est bon, j'ai fait autrement. Ma chaîne commence dans certains cas par
un "#", et je fais juste un test par une expression régulière sur le
premier caractère, , je l'ôte par substr (euh si je me souviens bien),
et je la traite en fonction de ce cas déterminé.
Le Sat, 18 Nov 2006 22:02:51 +0000, Olivier Miakinen a écrit :
... Oui. Attention, dans la doc en français (en tout cas celle que l'on trouve sur www.php.net) il y a une erreur. Ils ont oublié le « sign specifier » (spécificateur de signe) et le « padding specifier » a été indiqué deux fois, une fois sous le nom de spécificateur d'espacement et une fois sous le nom de remplisseur. ... En fait, la bonne traduction est plutôt « remplisseur ». Il s'agit de savoir par quoi on remplit un champ lorsque la valeur est plus petite que l'espace dont on dispose. Souvent c'est par des espaces, quelquefois par des 0 pour les nombres, et sinon on peut mettre ce qu'on veut grâce à cette syntaxe. ... Bon, il y a bien une erreur; ça me turlupinait la moelle épinière.
Curieusement, cela semble être particulier au sprintf de PHP, inconnu des syntaxes de sprintf() en C : <http://www.google.fr/search?q=man+sprintf+%22padding+specifier%22> ...
Dus peu de connaissances en C qu'il me reste, je confirme.
Très certainement parce que l'argument n'existe que pour sprintf. D'ailleurs le traitement des caractères blancs dans sscanf se fait en dehors des séquences %-quelque-chose, je ne vois pas bien comment une spécification de conversion pourrait influer sur le traitement des séparateurs avant et après.
Contrairement à ce qui est indiqué dans la doc qui dit que les arguments
sont à trouver à la rubrique sprintf et sont les mêmes que pour sscanf. ...
Tu sais combien il y a de tels caractères à chaque fois ? Si oui, c'est facile : tu les mets tels quels dans la chaîne. Sinon, utilise plutôt preg_match(), preg_replace(), strtok(), split(), preg_split(), explode() et ainsi de suite.
Un exemple du premier cas : pour extraire les nombres dans "##32#10###9" tu peux utiliser "##%d#%d###%d".
C'est bon, j'ai fait autrement. Ma chaîne commence dans certains cas par un "#", et je fais juste un test par une expression régulière sur le premier caractère, , je l'ôte par substr (euh si je me souviens bien), et je la traite en fonction de ce cas déterminé.
Merci beaucoup, j'ai mes réponses.
Michel
Olivier Miakinen
[...] ce qui est indiqué dans la doc qui dit que les arguments sont à trouver à la rubrique sprintf et sont les mêmes que pour sscanf.
Oui, ce sont les mêmes pour les arguments standards (%d, %s, etc.) mais il y a forcément des différences. Je trouve vraiment dommage qu'ils aient eu la flemme de faire une doc séparée : par exemple, on ne sait pas si la syntaxe %*d est acceptée pour sscanf.
C'est bon, j'ai fait autrement. Ma chaîne commence dans certains cas par un "#", et je fais juste un test par une expression régulière sur le premier caractère, , je l'ôte par substr (euh si je me souviens bien), et je la traite en fonction de ce cas déterminé.
Pour un cas aussi simple, ce n'est peut-être pas la peine d'aller chercher le marteau-pilon des expressions régulières :
if ($str[0] == '#') $str = substr($str, 1);
ou bien :
if (substr($str, 0, 1) == '#') $str = substr($str, 1);
[...] ce qui est indiqué dans la doc qui dit que les arguments
sont à trouver à la rubrique sprintf et sont les mêmes que pour
sscanf.
Oui, ce sont les mêmes pour les arguments standards (%d, %s, etc.) mais
il y a forcément des différences. Je trouve vraiment dommage qu'ils
aient eu la flemme de faire une doc séparée : par exemple, on ne sait
pas si la syntaxe %*d est acceptée pour sscanf.
C'est bon, j'ai fait autrement. Ma chaîne commence dans certains cas par
un "#", et je fais juste un test par une expression régulière sur le
premier caractère, , je l'ôte par substr (euh si je me souviens bien),
et je la traite en fonction de ce cas déterminé.
Pour un cas aussi simple, ce n'est peut-être pas la peine d'aller
chercher le marteau-pilon des expressions régulières :
if ($str[0] == '#') $str = substr($str, 1);
ou bien :
if (substr($str, 0, 1) == '#') $str = substr($str, 1);
[...] ce qui est indiqué dans la doc qui dit que les arguments sont à trouver à la rubrique sprintf et sont les mêmes que pour sscanf.
Oui, ce sont les mêmes pour les arguments standards (%d, %s, etc.) mais il y a forcément des différences. Je trouve vraiment dommage qu'ils aient eu la flemme de faire une doc séparée : par exemple, on ne sait pas si la syntaxe %*d est acceptée pour sscanf.
C'est bon, j'ai fait autrement. Ma chaîne commence dans certains cas par un "#", et je fais juste un test par une expression régulière sur le premier caractère, , je l'ôte par substr (euh si je me souviens bien), et je la traite en fonction de ce cas déterminé.
Pour un cas aussi simple, ce n'est peut-être pas la peine d'aller chercher le marteau-pilon des expressions régulières :
if ($str[0] == '#') $str = substr($str, 1);
ou bien :
if (substr($str, 0, 1) == '#') $str = substr($str, 1);