En général, ça ne vaut pas la peine d'écrire un parseur pour des choses aussi simple.
et regex, ce n'est pas (en quelque sorte) un parseur ? ;-)
Oui, mais déjà écrit.
-- ;-)
kanze
Fabien LE LEZ wrote:
On 23 Mar 2005 03:26:06 -0800, :
entier( "^s*[+-]?d+s*$" ) ;
Ça me paraît bizarre comme expression (mais je ne connais pas la version Boost des regex). C'est pas plutôt "^s*[+-]?d+s*$" ?
En effet. Il faut doubler les dans la chaîne, afin qu'ils y soient et que boost::regex puisse les lire. Je pensais effectivement à ce qu'il fallait donner à boost::regex.
-- James Kanze GABI Software Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
Fabien LE LEZ wrote:
On 23 Mar 2005 03:26:06 -0800, kanze@gabi-soft.fr:
entier( "^s*[+-]?d+s*$" ) ;
Ça me paraît bizarre comme expression (mais je ne connais pas
la version Boost des regex). C'est pas plutôt
"^\s*[+-]?\d+\s*$" ?
En effet. Il faut doubler les dans la chaîne, afin qu'ils y
soient et que boost::regex puisse les lire. Je pensais
effectivement à ce qu'il fallait donner à boost::regex.
--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
Ça me paraît bizarre comme expression (mais je ne connais pas la version Boost des regex). C'est pas plutôt "^s*[+-]?d+s*$" ?
En effet. Il faut doubler les dans la chaîne, afin qu'ils y soient et que boost::regex puisse les lire. Je pensais effectivement à ce qu'il fallait donner à boost::regex.
-- James Kanze GABI Software Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
Non non, quand je dis que je ne comprends pas, c'est pas que je comprendrai mieux un équivalent avec des symbles des plus bizarres pour moi !! Franchement, je ne comprends pas plus ce que tu viens d'écrire que ce qu'il y avait avant ! C'est du vrai charabia pour moi ! Ou, à la limite, du chinois parce que ce sont les mêmes symboles ... lol
Mais est-ce que vous me confirmez qu'il n'existe vraiment AUCUN moyen de faire ce que je veux avec un if ou un while ???
Non non, quand je dis que je ne comprends pas, c'est pas que je comprendrai
mieux un équivalent avec des symbles des plus bizarres pour moi !!
Franchement, je ne comprends pas plus ce que tu viens d'écrire que ce qu'il
y avait avant ! C'est du vrai charabia pour moi ! Ou, à la limite, du
chinois parce que ce sont les mêmes symboles ... lol
Mais est-ce que vous me confirmez qu'il n'existe vraiment AUCUN moyen de
faire ce que je veux avec un if ou un while ???
Non non, quand je dis que je ne comprends pas, c'est pas que je comprendrai mieux un équivalent avec des symbles des plus bizarres pour moi !! Franchement, je ne comprends pas plus ce que tu viens d'écrire que ce qu'il y avait avant ! C'est du vrai charabia pour moi ! Ou, à la limite, du chinois parce que ce sont les mêmes symboles ... lol
Mais est-ce que vous me confirmez qu'il n'existe vraiment AUCUN moyen de faire ce que je veux avec un if ou un while ???
Non non, quand je dis que je ne comprends pas, c'est pas que je comprendrai mieux un équivalent avec des symbles des plus bizarres pour moi !! Franchement, je ne comprends pas plus ce que tu viens d'écrire que ce qu'il y avait avant ! C'est du vrai charabia pour moi ! Ou, à la limite, du chinois parce que ce sont les mêmes symboles ... lol
Mais est-ce que vous me confirmez qu'il n'existe vraiment AUCUN moyen de faire ce que je veux avec un if ou un while ???
C'est du C, désolé. Ça respecte votre "cahier des charges": "En fait, tu as bien dit ce que je voudrais faire : analyser une chaîne pour voir qi elle ne contient que des chiffres ou non ... Et ensuite, faire une action s'il n'y a pas que des chiffres, une autre s'il n'y a que des chiffres ..."
Non non, quand je dis que je ne comprends pas, c'est pas que je comprendrai
mieux un équivalent avec des symbles des plus bizarres pour moi !!
Franchement, je ne comprends pas plus ce que tu viens d'écrire que ce qu'il
y avait avant ! C'est du vrai charabia pour moi ! Ou, à la limite, du
chinois parce que ce sont les mêmes symboles ... lol
Mais est-ce que vous me confirmez qu'il n'existe vraiment AUCUN moyen de
faire ce que je veux avec un if ou un while ???
C'est du C, désolé.
Ça respecte votre "cahier des charges":
"En fait, tu as bien dit ce que je voudrais faire : analyser une chaîne
pour voir qi elle ne contient que des chiffres ou non ... Et ensuite,
faire une action s'il n'y a pas que des chiffres, une autre s'il n'y a
que des chiffres ..."
Non non, quand je dis que je ne comprends pas, c'est pas que je comprendrai mieux un équivalent avec des symbles des plus bizarres pour moi !! Franchement, je ne comprends pas plus ce que tu viens d'écrire que ce qu'il y avait avant ! C'est du vrai charabia pour moi ! Ou, à la limite, du chinois parce que ce sont les mêmes symboles ... lol
Mais est-ce que vous me confirmez qu'il n'existe vraiment AUCUN moyen de faire ce que je veux avec un if ou un while ???
C'est du C, désolé. Ça respecte votre "cahier des charges": "En fait, tu as bien dit ce que je voudrais faire : analyser une chaîne pour voir qi elle ne contient que des chiffres ou non ... Et ensuite, faire une action s'il n'y a pas que des chiffres, une autre s'il n'y a que des chiffres ..."
Non non, quand je dis que je ne comprends pas, c'est pas que je comprendrai mieux un équivalent avec des symbles des plus bizarres pour moi !! Franchement, je ne comprends pas plus ce que tu viens d'écrire que ce qu'il y avait avant ! C'est du vrai charabia pour moi ! Ou, à la limite, du chinois parce que ce sont les mêmes symboles ... lol
C'est des expressions régulières. C'est super pratique, mais assez peu lisible. Sauf erreur, ce que j'ai écrit permet de supprimer les MdRRR et autres lOlllLL d'un message (c'est juste que souvent j'ai du mal à comprendre ce qui peu bien déclencher une telle excitation zygomatique).
Mais est-ce que vous me confirmez qu'il n'existe vraiment AUCUN moyen de faire ce que je veux avec un if ou un while ???
On t'a parlé de tester l'état d'un flux type stringstream apres avoir tenté d'y avoir lu la variable... Tu peux aussi aller voir boost qui te permet de faire boost::lexical_cast< TonType >(taChaine), et qui lance une exception s'il n'y arrive pas.
Non non, quand je dis que je ne comprends pas, c'est pas que je
comprendrai mieux un équivalent avec des symbles des plus bizarres pour
moi !!
Franchement, je ne comprends pas plus ce que tu viens d'écrire que ce
qu'il y avait avant ! C'est du vrai charabia pour moi ! Ou, à la limite,
du chinois parce que ce sont les mêmes symboles ... lol
C'est des expressions régulières. C'est super pratique, mais assez peu
lisible. Sauf erreur, ce que j'ai écrit permet de supprimer les MdRRR et
autres lOlllLL d'un message (c'est juste que souvent j'ai du mal à
comprendre ce qui peu bien déclencher une telle excitation zygomatique).
Mais est-ce que vous me confirmez qu'il n'existe vraiment AUCUN moyen de
faire ce que je veux avec un if ou un while ???
On t'a parlé de tester l'état d'un flux type stringstream apres avoir tenté
d'y avoir lu la variable...
Tu peux aussi aller voir boost qui te permet de faire boost::lexical_cast<
TonType >(taChaine), et qui lance une exception s'il n'y arrive pas.
Non non, quand je dis que je ne comprends pas, c'est pas que je comprendrai mieux un équivalent avec des symbles des plus bizarres pour moi !! Franchement, je ne comprends pas plus ce que tu viens d'écrire que ce qu'il y avait avant ! C'est du vrai charabia pour moi ! Ou, à la limite, du chinois parce que ce sont les mêmes symboles ... lol
C'est des expressions régulières. C'est super pratique, mais assez peu lisible. Sauf erreur, ce que j'ai écrit permet de supprimer les MdRRR et autres lOlllLL d'un message (c'est juste que souvent j'ai du mal à comprendre ce qui peu bien déclencher une telle excitation zygomatique).
Mais est-ce que vous me confirmez qu'il n'existe vraiment AUCUN moyen de faire ce que je veux avec un if ou un while ???
On t'a parlé de tester l'état d'un flux type stringstream apres avoir tenté d'y avoir lu la variable... Tu peux aussi aller voir boost qui te permet de faire boost::lexical_cast< TonType >(taChaine), et qui lance une exception s'il n'y arrive pas.
-- Vincent
James Kanze
Rudy wrote:
Dans la pratique, pas directement. Mais si on connaît cin, on connaît les flux, et Ivan et moi avons tous les deux proposé des solutions à base des flux.
Oui, mais je ne connais pa du tout les syntaxes que vous m'avez proposé. Alors que if(!cin), je connais très bien ... lol
Quels syntaxes ? J'ai bien cité la solution avec expressions régulières, mais en disant que c'était peut-être un peu trop avancé pour toi. L'autre solution que j'ai proposé n'utilise aucun syntaxe plus compliqué que « if ( flux ) » ; celui d'Ivan était même plus simple à suivre, parce qu'il sortait tous les tests dans les variables séparées.
Si tu ne comprends pas la solution qu'a proposé Ivan, pose des questions sur ce que tu n'as pas compris, parce que c'est certainement à ton niveau. AMHA, ma solution sans expressions régulières aussi, mais il faut plus d'explications quand même.
Je dois ajouter que les solutions de Ivan et de moi (avec getline, puis >> pour parser la ligne), sont vraiment les solutions idiomatiques du C++ ; c'est la façon normale de procéder.
Donc si vous conniassez une solution qui utilise des boucles simples, je préfèrerai vraiment : je serai totalement incapable d'expliquer le reste !
Notamment "^s*[+-]?d+s*$" ; pour moi c'est un truc qu'on a écrit et qu'il faut après remplacer par ce qu'on veut ! MDRRR !
C'est à peu près ça. La spécification du texte à chercher se fait au moyen d'une expression régulière. Il existe des classes d'expression régulière tout faite, où tu n'as qu'à spécifier ce que tu veux chercher. Tu spécifies une ligne légale. Tu appliques l'expression régulière à la ligne. Si tu trouves, c'est que la syntaxe de la ligne était bonne. Sinon, elle était mauvaise.
-- James Kanze mailto: Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 9 pl. Pierre Sémard, 78210 St.-Cyr-l'École, France +33 (0)1 30 23 00 34
Rudy wrote:
Dans la pratique, pas directement. Mais si on connaît cin, on
connaît les flux, et Ivan et moi avons tous les deux proposé
des solutions à base des flux.
Oui, mais je ne connais pa du tout les syntaxes que vous
m'avez proposé. Alors que if(!cin), je connais très bien ...
lol
Quels syntaxes ? J'ai bien cité la solution avec expressions
régulières, mais en disant que c'était peut-être un peu trop
avancé pour toi. L'autre solution que j'ai proposé n'utilise
aucun syntaxe plus compliqué que « if ( flux ) » ; celui d'Ivan
était même plus simple à suivre, parce qu'il sortait tous les
tests dans les variables séparées.
Si tu ne comprends pas la solution qu'a proposé Ivan, pose des
questions sur ce que tu n'as pas compris, parce que c'est
certainement à ton niveau. AMHA, ma solution sans expressions
régulières aussi, mais il faut plus d'explications quand même.
Je dois ajouter que les solutions de Ivan et de moi (avec
getline, puis >> pour parser la ligne), sont vraiment les
solutions idiomatiques du C++ ; c'est la façon normale de
procéder.
Donc si vous conniassez une solution qui utilise des boucles
simples, je préfèrerai vraiment : je serai totalement
incapable d'expliquer le reste !
Notamment "^s*[+-]?d+s*$" ; pour moi c'est un truc qu'on a
écrit et qu'il faut après remplacer par ce qu'on veut ! MDRRR
!
C'est à peu près ça. La spécification du texte à chercher se
fait au moyen d'une expression régulière. Il existe des classes
d'expression régulière tout faite, où tu n'as qu'à spécifier ce
que tu veux chercher. Tu spécifies une ligne légale. Tu
appliques l'expression régulière à la ligne. Si tu trouves,
c'est que la syntaxe de la ligne était bonne. Sinon, elle était
mauvaise.
--
James Kanze mailto: james.kanze@free.fr
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 pl. Pierre Sémard, 78210 St.-Cyr-l'École, France +33 (0)1 30 23 00 34
Dans la pratique, pas directement. Mais si on connaît cin, on connaît les flux, et Ivan et moi avons tous les deux proposé des solutions à base des flux.
Oui, mais je ne connais pa du tout les syntaxes que vous m'avez proposé. Alors que if(!cin), je connais très bien ... lol
Quels syntaxes ? J'ai bien cité la solution avec expressions régulières, mais en disant que c'était peut-être un peu trop avancé pour toi. L'autre solution que j'ai proposé n'utilise aucun syntaxe plus compliqué que « if ( flux ) » ; celui d'Ivan était même plus simple à suivre, parce qu'il sortait tous les tests dans les variables séparées.
Si tu ne comprends pas la solution qu'a proposé Ivan, pose des questions sur ce que tu n'as pas compris, parce que c'est certainement à ton niveau. AMHA, ma solution sans expressions régulières aussi, mais il faut plus d'explications quand même.
Je dois ajouter que les solutions de Ivan et de moi (avec getline, puis >> pour parser la ligne), sont vraiment les solutions idiomatiques du C++ ; c'est la façon normale de procéder.
Donc si vous conniassez une solution qui utilise des boucles simples, je préfèrerai vraiment : je serai totalement incapable d'expliquer le reste !
Notamment "^s*[+-]?d+s*$" ; pour moi c'est un truc qu'on a écrit et qu'il faut après remplacer par ce qu'on veut ! MDRRR !
C'est à peu près ça. La spécification du texte à chercher se fait au moyen d'une expression régulière. Il existe des classes d'expression régulière tout faite, où tu n'as qu'à spécifier ce que tu veux chercher. Tu spécifies une ligne légale. Tu appliques l'expression régulière à la ligne. Si tu trouves, c'est que la syntaxe de la ligne était bonne. Sinon, elle était mauvaise.
-- James Kanze mailto: Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 9 pl. Pierre Sémard, 78210 St.-Cyr-l'École, France +33 (0)1 30 23 00 34