J'avais pensé au sscanf, mais comme je débute en C++, j'essaie d'éviter
d'employer des fonctions venant du monde C.
J'ai du lire quelque part que
c'est mal d'employer des fonctions de C :-)
Je cherche donc à employer l'outil C++ lorsqu'il existe.
J'avais pensé au sscanf, mais comme je débute en C++, j'essaie d'éviter
d'employer des fonctions venant du monde C.
J'ai du lire quelque part que
c'est mal d'employer des fonctions de C :-)
Je cherche donc à employer l'outil C++ lorsqu'il existe.
J'avais pensé au sscanf, mais comme je débute en C++, j'essaie d'éviter
d'employer des fonctions venant du monde C.
J'ai du lire quelque part que
c'est mal d'employer des fonctions de C :-)
Je cherche donc à employer l'outil C++ lorsqu'il existe.
Boost.Spirit ?
Là, c'est peut-être effectivement un peu lourd. (Surtout, je
crois, c'est encore un langage à apprendre.)
Boost.Spirit ?
Là, c'est peut-être effectivement un peu lourd. (Surtout, je
crois, c'est encore un langage à apprendre.)
Boost.Spirit ?
Là, c'est peut-être effectivement un peu lourd. (Surtout, je
crois, c'est encore un langage à apprendre.)
On Mon, 26 Feb 2007 15:28:12 +0000 (UTC), Marc Boyer
:string s= "%%%{1,[2,0,0,0,0,2]%%%}+%%%{1,[1,0,0,1,0,2]%%%}";
int res= scanf("%%%%%%{%d,[%d,%d,%d,%d,%d,%d]%%%%%%}+"
"%%%%%%{%d,[%d,%d,%d,%d,%d,%d]%%%%%%}",
&coef,°re,
/// A continuer avec la sémantique de tes vars
C'est lourd, impossible à maintenir, et tout se casse la gueule si
jamais l'expression n'est pas fixe.
Sérieux ?
Et tu envisages quoi qui serait moins lourd, plus maintenable ?
Boost.Spirit ?
On Mon, 26 Feb 2007 15:28:12 +0000 (UTC), Marc Boyer
<Marc.Boyer@enseeiht.yahoo.fr.invalid>:
string s= "%%%{1,[2,0,0,0,0,2]%%%}+%%%{1,[1,0,0,1,0,2]%%%}";
int res= scanf("%%%%%%{%d,[%d,%d,%d,%d,%d,%d]%%%%%%}+"
"%%%%%%{%d,[%d,%d,%d,%d,%d,%d]%%%%%%}",
&coef,°re,
/// A continuer avec la sémantique de tes vars
C'est lourd, impossible à maintenir, et tout se casse la gueule si
jamais l'expression n'est pas fixe.
Sérieux ?
Et tu envisages quoi qui serait moins lourd, plus maintenable ?
Boost.Spirit ?
On Mon, 26 Feb 2007 15:28:12 +0000 (UTC), Marc Boyer
:string s= "%%%{1,[2,0,0,0,0,2]%%%}+%%%{1,[1,0,0,1,0,2]%%%}";
int res= scanf("%%%%%%{%d,[%d,%d,%d,%d,%d,%d]%%%%%%}+"
"%%%%%%{%d,[%d,%d,%d,%d,%d,%d]%%%%%%}",
&coef,°re,
/// A continuer avec la sémantique de tes vars
C'est lourd, impossible à maintenir, et tout se casse la gueule si
jamais l'expression n'est pas fixe.
Sérieux ?
Et tu envisages quoi qui serait moins lourd, plus maintenable ?
Boost.Spirit ?
On Feb 26, 9:09 am, Dominique MICOLLET
bourgogne.fr.fr.fr> wrote:Je cherche à isoler dans la chaîne suivante :
%%%{1,[2,0,0,0,0,2]%%%}+%%%{1,[1,0,0,1,0,2]%%%}
les différents nombres qui y apparaissent, en conservant leur séma ntique (le
premier 1 est un coefficient, le premier 2 est un degré).
En utilisant astucieusement les méthodes de recherche de caractère s ou
sous-chaînes et d'extraction de ces dernières, je devrais m'en sor tir.
Mais j'imagine que d'autres ont déjà eu ce souci et qu'il existe u ne
solution toute prête.
La solution évidente, c'est boost::regex. Tu décris le format de
la chaîne en forme d'expression régulière, avec chacun des
nombres dans un (...). Ensuite, tu recupère les sous-chaînes
une à une, et tu te sers de std::istringstream pour les
convertir en valeurs numériques.
Est-ce que ce n'est pas le marteau pilon pour écraser la mouche ?
Pourquoi pas un bête sscanf ?
On Feb 26, 9:09 am, Dominique MICOLLET <Dominique.Micol...@u-
bourgogne.fr.fr.fr> wrote:
Je cherche à isoler dans la chaîne suivante :
%%%{1,[2,0,0,0,0,2]%%%}+%%%{1,[1,0,0,1,0,2]%%%}
les différents nombres qui y apparaissent, en conservant leur séma ntique (le
premier 1 est un coefficient, le premier 2 est un degré).
En utilisant astucieusement les méthodes de recherche de caractère s ou
sous-chaînes et d'extraction de ces dernières, je devrais m'en sor tir.
Mais j'imagine que d'autres ont déjà eu ce souci et qu'il existe u ne
solution toute prête.
La solution évidente, c'est boost::regex. Tu décris le format de
la chaîne en forme d'expression régulière, avec chacun des
nombres dans un (...). Ensuite, tu recupère les sous-chaînes
une à une, et tu te sers de std::istringstream pour les
convertir en valeurs numériques.
Est-ce que ce n'est pas le marteau pilon pour écraser la mouche ?
Pourquoi pas un bête sscanf ?
On Feb 26, 9:09 am, Dominique MICOLLET
bourgogne.fr.fr.fr> wrote:Je cherche à isoler dans la chaîne suivante :
%%%{1,[2,0,0,0,0,2]%%%}+%%%{1,[1,0,0,1,0,2]%%%}
les différents nombres qui y apparaissent, en conservant leur séma ntique (le
premier 1 est un coefficient, le premier 2 est un degré).
En utilisant astucieusement les méthodes de recherche de caractère s ou
sous-chaînes et d'extraction de ces dernières, je devrais m'en sor tir.
Mais j'imagine que d'autres ont déjà eu ce souci et qu'il existe u ne
solution toute prête.
La solution évidente, c'est boost::regex. Tu décris le format de
la chaîne en forme d'expression régulière, avec chacun des
nombres dans un (...). Ensuite, tu recupère les sous-chaînes
une à une, et tu te sers de std::istringstream pour les
convertir en valeurs numériques.
Est-ce que ce n'est pas le marteau pilon pour écraser la mouche ?
Pourquoi pas un bête sscanf ?
On Mon, 26 Feb 2007 15:28:12 +0000 (UTC), Marc Boyer
:string s= "%%%{1,[2,0,0,0,0,2]%%%}+%%%{1,[1,0,0,1,0,2]%%%}";
int res= scanf("%%%%%%{%d,[%d,%d,%d,%d,%d,%d]%%%%%%}+"
"%%%%%%{%d,[%d,%d,%d,%d,%d,%d]%%%%%%}",
&coef,°re,
/// A continuer avec la sémantique de tes vars
C'est lourd, impossible à maintenir, et tout se casse la gueule si
jamais l'expression n'est pas fixe.
Sérieux ?
Et tu envisages quoi qui serait moins lourd, plus maintenable ?
Boost.Spirit ?
On Mon, 26 Feb 2007 15:28:12 +0000 (UTC), Marc Boyer
<Marc.Bo...@enseeiht.yahoo.fr.invalid>:
string s= "%%%{1,[2,0,0,0,0,2]%%%}+%%%{1,[1,0,0,1,0,2]%%%}";
int res= scanf("%%%%%%{%d,[%d,%d,%d,%d,%d,%d]%%%%%%}+"
"%%%%%%{%d,[%d,%d,%d,%d,%d,%d]%%%%%%}",
&coef,°re,
/// A continuer avec la sémantique de tes vars
C'est lourd, impossible à maintenir, et tout se casse la gueule si
jamais l'expression n'est pas fixe.
Sérieux ?
Et tu envisages quoi qui serait moins lourd, plus maintenable ?
Boost.Spirit ?
On Mon, 26 Feb 2007 15:28:12 +0000 (UTC), Marc Boyer
:string s= "%%%{1,[2,0,0,0,0,2]%%%}+%%%{1,[1,0,0,1,0,2]%%%}";
int res= scanf("%%%%%%{%d,[%d,%d,%d,%d,%d,%d]%%%%%%}+"
"%%%%%%{%d,[%d,%d,%d,%d,%d,%d]%%%%%%}",
&coef,°re,
/// A continuer avec la sémantique de tes vars
C'est lourd, impossible à maintenir, et tout se casse la gueule si
jamais l'expression n'est pas fixe.
Sérieux ?
Et tu envisages quoi qui serait moins lourd, plus maintenable ?
Boost.Spirit ?
J'avais pensé au sscanf, mais comme je débute en C++, j'essaie d' éviter
d'employer des fonctions venant du monde C.
C'est un bon réflexe de débutant, mais ce n'est pas une
règle absolue.
J'ai du lire quelque part que
c'est mal d'employer des fonctions de C :-)
Parfois, des gens écrivent des bétises (ou des approximations).
Je cherche donc à employer l'outil C++ lorsqu'il existe.
Ils existent. De là à dire qu'ils sont plus efficaces dans
ce cas là. Mais bon, je ne demande qu'à être convaincu.
J'avais pensé au sscanf, mais comme je débute en C++, j'essaie d' éviter
d'employer des fonctions venant du monde C.
C'est un bon réflexe de débutant, mais ce n'est pas une
règle absolue.
J'ai du lire quelque part que
c'est mal d'employer des fonctions de C :-)
Parfois, des gens écrivent des bétises (ou des approximations).
Je cherche donc à employer l'outil C++ lorsqu'il existe.
Ils existent. De là à dire qu'ils sont plus efficaces dans
ce cas là. Mais bon, je ne demande qu'à être convaincu.
J'avais pensé au sscanf, mais comme je débute en C++, j'essaie d' éviter
d'employer des fonctions venant du monde C.
C'est un bon réflexe de débutant, mais ce n'est pas une
règle absolue.
J'ai du lire quelque part que
c'est mal d'employer des fonctions de C :-)
Parfois, des gens écrivent des bétises (ou des approximations).
Je cherche donc à employer l'outil C++ lorsqu'il existe.
Ils existent. De là à dire qu'ils sont plus efficaces dans
ce cas là. Mais bon, je ne demande qu'à être convaincu.
"James Kanze" writes:Boost.Spirit ?
Là, c'est peut-être effectivement un peu lourd. (Surtout, je
crois, c'est encore un langage à apprendre.)
Mais non, c'est du C++.
"James Kanze" <james.kanze@gmail.com> writes:
Boost.Spirit ?
Là, c'est peut-être effectivement un peu lourd. (Surtout, je
crois, c'est encore un langage à apprendre.)
Mais non, c'est du C++.
"James Kanze" writes:Boost.Spirit ?
Là, c'est peut-être effectivement un peu lourd. (Surtout, je
crois, c'est encore un langage à apprendre.)
Mais non, c'est du C++.
"James Kanze" writes:Boost.Spirit ?
Là, c'est peut-être effectivement un peu lourd. (Surtout, je
crois, c'est encore un langage à apprendre.)
Mais non, c'est du C++.
int_p[ assign_a( d1.x ) ] >> ch_p(',')
ch_p('[')
int_p[ push_back_a( d1.v ) ]
*( ch_p(',') >> int_p[ push_back_a( d1.v ) ] )
ch_p(']')
chseq_p("%%%}")
anychar_p[ assign_a( op ) ]
chseq_p("%%%{")
int_p[ assign_a( d2.x ) ] >> ch_p(',')
ch_p('[')
int_p[ push_back_a( d2.v ) ]
*( ch_p(',') >> int_p[ push_back_a( d2.v ) ] )
ch_p(']')
chseq_p("%%%}")
;
int_p[ assign_a( tmp.x ) ] >> ch_p(',')
ch_p('[')
int_p[ push_back_a( tmp.v ) ]
*( ch_p(',') >> int_p[ push_back_a( tmp.v ) ] )
ch_p(']')
chseq_p("%%%}");
anychar_p[ assign_a( op ) ]
data_p[ assign_a( d2 ) ];
"James Kanze" <james.kanze@gmail.com> writes:
Boost.Spirit ?
Là, c'est peut-être effectivement un peu lourd. (Surtout, je
crois, c'est encore un langage à apprendre.)
Mais non, c'est du C++.
int_p[ assign_a( d1.x ) ] >> ch_p(',')
ch_p('[')
int_p[ push_back_a( d1.v ) ]
*( ch_p(',') >> int_p[ push_back_a( d1.v ) ] )
ch_p(']')
chseq_p("%%%}")
anychar_p[ assign_a( op ) ]
chseq_p("%%%{")
int_p[ assign_a( d2.x ) ] >> ch_p(',')
ch_p('[')
int_p[ push_back_a( d2.v ) ]
*( ch_p(',') >> int_p[ push_back_a( d2.v ) ] )
ch_p(']')
chseq_p("%%%}")
;
int_p[ assign_a( tmp.x ) ] >> ch_p(',')
ch_p('[')
int_p[ push_back_a( tmp.v ) ]
*( ch_p(',') >> int_p[ push_back_a( tmp.v ) ] )
ch_p(']')
chseq_p("%%%}");
anychar_p[ assign_a( op ) ]
data_p[ assign_a( d2 ) ];
"James Kanze" writes:Boost.Spirit ?
Là, c'est peut-être effectivement un peu lourd. (Surtout, je
crois, c'est encore un langage à apprendre.)
Mais non, c'est du C++.
int_p[ assign_a( d1.x ) ] >> ch_p(',')
ch_p('[')
int_p[ push_back_a( d1.v ) ]
*( ch_p(',') >> int_p[ push_back_a( d1.v ) ] )
ch_p(']')
chseq_p("%%%}")
anychar_p[ assign_a( op ) ]
chseq_p("%%%{")
int_p[ assign_a( d2.x ) ] >> ch_p(',')
ch_p('[')
int_p[ push_back_a( d2.v ) ]
*( ch_p(',') >> int_p[ push_back_a( d2.v ) ] )
ch_p(']')
chseq_p("%%%}")
;
int_p[ assign_a( tmp.x ) ] >> ch_p(',')
ch_p('[')
int_p[ push_back_a( tmp.v ) ]
*( ch_p(',') >> int_p[ push_back_a( tmp.v ) ] )
ch_p(']')
chseq_p("%%%}");
anychar_p[ assign_a( op ) ]
data_p[ assign_a( d2 ) ];
On Feb 26, 4:29 pm, Marc Boyer
wrote:On Feb 26, 9:09 am, Dominique MICOLLET
bourgogne.fr.fr.fr> wrote:Je cherche à isoler dans la chaîne suivante :
%%%{1,[2,0,0,0,0,2]%%%}+%%%{1,[1,0,0,1,0,2]%%%}
les différents nombres qui y apparaissent, en conservant leur sémantique (le
premier 1 est un coefficient, le premier 2 est un degré).
En utilisant astucieusement les méthodes de recherche de caractères ou
sous-chaînes et d'extraction de ces dernières, je devrais m'en sortir.
Mais j'imagine que d'autres ont déjà eu ce souci et qu'il existe une
solution toute prête.
La solution évidente, c'est boost::regex. Tu décris le format de
la chaîne en forme d'expression régulière, avec chacun des
nombres dans un (...). Ensuite, tu recupère les sous-chaînes
une à une, et tu te sers de std::istringstream pour les
convertir en valeurs numériques.
Est-ce que ce n'est pas le marteau pilon pour écraser la mouche ?
Je ne connais rien de plus simple pour valider une chaîne et en
extraire les champs. C'est l'outil de base.
Pourquoi pas un bête sscanf ?
Parce que je veux du code qui marche, et qui est facile à
maintenir ?
Parce qu'il exige que le programmeur apprenne
encore un autre langage de description du format -- un langage
fort peu puissant, et en général inconnu des programmeurs C++ ?
Parce qu'il est extrèmement fragile en ce qui concerne les
paramètres, exigeant des pointeurs à des types bien précis ?
Parce qu'il ne donne pas beaucoup d'information en ce qui
concerne des erreurs éventuelles ?
On Feb 26, 4:29 pm, Marc Boyer <Marc.Bo...@enseeiht.yahoo.fr.invalid>
wrote:
On Feb 26, 9:09 am, Dominique MICOLLET <Dominique.Micol...@u-
bourgogne.fr.fr.fr> wrote:
Je cherche à isoler dans la chaîne suivante :
%%%{1,[2,0,0,0,0,2]%%%}+%%%{1,[1,0,0,1,0,2]%%%}
les différents nombres qui y apparaissent, en conservant leur sémantique (le
premier 1 est un coefficient, le premier 2 est un degré).
En utilisant astucieusement les méthodes de recherche de caractères ou
sous-chaînes et d'extraction de ces dernières, je devrais m'en sortir.
Mais j'imagine que d'autres ont déjà eu ce souci et qu'il existe une
solution toute prête.
La solution évidente, c'est boost::regex. Tu décris le format de
la chaîne en forme d'expression régulière, avec chacun des
nombres dans un (...). Ensuite, tu recupère les sous-chaînes
une à une, et tu te sers de std::istringstream pour les
convertir en valeurs numériques.
Est-ce que ce n'est pas le marteau pilon pour écraser la mouche ?
Je ne connais rien de plus simple pour valider une chaîne et en
extraire les champs. C'est l'outil de base.
Pourquoi pas un bête sscanf ?
Parce que je veux du code qui marche, et qui est facile à
maintenir ?
Parce qu'il exige que le programmeur apprenne
encore un autre langage de description du format -- un langage
fort peu puissant, et en général inconnu des programmeurs C++ ?
Parce qu'il est extrèmement fragile en ce qui concerne les
paramètres, exigeant des pointeurs à des types bien précis ?
Parce qu'il ne donne pas beaucoup d'information en ce qui
concerne des erreurs éventuelles ?
On Feb 26, 4:29 pm, Marc Boyer
wrote:On Feb 26, 9:09 am, Dominique MICOLLET
bourgogne.fr.fr.fr> wrote:Je cherche à isoler dans la chaîne suivante :
%%%{1,[2,0,0,0,0,2]%%%}+%%%{1,[1,0,0,1,0,2]%%%}
les différents nombres qui y apparaissent, en conservant leur sémantique (le
premier 1 est un coefficient, le premier 2 est un degré).
En utilisant astucieusement les méthodes de recherche de caractères ou
sous-chaînes et d'extraction de ces dernières, je devrais m'en sortir.
Mais j'imagine que d'autres ont déjà eu ce souci et qu'il existe une
solution toute prête.
La solution évidente, c'est boost::regex. Tu décris le format de
la chaîne en forme d'expression régulière, avec chacun des
nombres dans un (...). Ensuite, tu recupère les sous-chaînes
une à une, et tu te sers de std::istringstream pour les
convertir en valeurs numériques.
Est-ce que ce n'est pas le marteau pilon pour écraser la mouche ?
Je ne connais rien de plus simple pour valider une chaîne et en
extraire les champs. C'est l'outil de base.
Pourquoi pas un bête sscanf ?
Parce que je veux du code qui marche, et qui est facile à
maintenir ?
Parce qu'il exige que le programmeur apprenne
encore un autre langage de description du format -- un langage
fort peu puissant, et en général inconnu des programmeurs C++ ?
Parce qu'il est extrèmement fragile en ce qui concerne les
paramètres, exigeant des pointeurs à des types bien précis ?
Parce qu'il ne donne pas beaucoup d'information en ce qui
concerne des erreurs éventuelles ?
On Feb 26, 6:11 pm, Michel Decima wrote:On Mon, 26 Feb 2007 15:28:12 +0000 (UTC), Marc Boyer
:string s= "%%%{1,[2,0,0,0,0,2]%%%}+%%%{1,[1,0,0,1,0,2]%%%}";
int res= scanf("%%%%%%{%d,[%d,%d,%d,%d,%d,%d]%%%%%%}+"
"%%%%%%{%d,[%d,%d,%d,%d,%d,%d]%%%%%%}",
&coef,°re,
/// A continuer avec la sémantique de tes vars
C'est lourd, impossible à maintenir, et tout se casse la gueule si
jamais l'expression n'est pas fixe.
Sérieux ?
Et tu envisages quoi qui serait moins lourd, plus maintenable ?
Prèsque n'importe quoi. Côté maintenabilité : d'après la
sémantique qu'il a suggéré, ça ne m'étonnerait pas que certaines
des valeurs, voire toutes, soient des flottants. Alors,
attention entre les %f et les %lf.
Sans parler des histoires de
localisation : s'il travaille avec une locale français (fort
probable vue la langue dans laquelle il a posté), les virgules
vont poser des problèmes s'il veut des flottants.
On Feb 26, 6:11 pm, Michel Decima <michel.dec...@orange-ft.com> wrote:
On Mon, 26 Feb 2007 15:28:12 +0000 (UTC), Marc Boyer
<Marc.Bo...@enseeiht.yahoo.fr.invalid>:
string s= "%%%{1,[2,0,0,0,0,2]%%%}+%%%{1,[1,0,0,1,0,2]%%%}";
int res= scanf("%%%%%%{%d,[%d,%d,%d,%d,%d,%d]%%%%%%}+"
"%%%%%%{%d,[%d,%d,%d,%d,%d,%d]%%%%%%}",
&coef,°re,
/// A continuer avec la sémantique de tes vars
C'est lourd, impossible à maintenir, et tout se casse la gueule si
jamais l'expression n'est pas fixe.
Sérieux ?
Et tu envisages quoi qui serait moins lourd, plus maintenable ?
Prèsque n'importe quoi. Côté maintenabilité : d'après la
sémantique qu'il a suggéré, ça ne m'étonnerait pas que certaines
des valeurs, voire toutes, soient des flottants. Alors,
attention entre les %f et les %lf.
Sans parler des histoires de
localisation : s'il travaille avec une locale français (fort
probable vue la langue dans laquelle il a posté), les virgules
vont poser des problèmes s'il veut des flottants.
On Feb 26, 6:11 pm, Michel Decima wrote:On Mon, 26 Feb 2007 15:28:12 +0000 (UTC), Marc Boyer
:string s= "%%%{1,[2,0,0,0,0,2]%%%}+%%%{1,[1,0,0,1,0,2]%%%}";
int res= scanf("%%%%%%{%d,[%d,%d,%d,%d,%d,%d]%%%%%%}+"
"%%%%%%{%d,[%d,%d,%d,%d,%d,%d]%%%%%%}",
&coef,°re,
/// A continuer avec la sémantique de tes vars
C'est lourd, impossible à maintenir, et tout se casse la gueule si
jamais l'expression n'est pas fixe.
Sérieux ?
Et tu envisages quoi qui serait moins lourd, plus maintenable ?
Prèsque n'importe quoi. Côté maintenabilité : d'après la
sémantique qu'il a suggéré, ça ne m'étonnerait pas que certaines
des valeurs, voire toutes, soient des flottants. Alors,
attention entre les %f et les %lf.
Sans parler des histoires de
localisation : s'il travaille avec une locale français (fort
probable vue la langue dans laquelle il a posté), les virgules
vont poser des problèmes s'il veut des flottants.