 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Fabien LE LEZ Guest
|
Posted: Fri Jul 30, 2004 12:43 am Post subject: Re: scanf() plante |
|
|
On Fri, 30 Jul 2004 02:44:48 +0200, "dark poulpo"
<syn-ack (AT) wanadoo (DOT) fr>:
| Quote: | if (sscanf(line, "%[^:]:%d", proxyname,port) == 2) // mon but est de
recuperer le serveur et le port dans une ligne de ce type www.kks.col:80rn
|
Utilise un vrai moteur d'expression régulières|rationelles ("regular
expressions", je ne suis pas sûr de la traduction en français).
boost::regex <http://www.boost.org/libs/regex/doc/index.html>, par
exemple.
Ou PCRE <http://www.pcre.org/>, si tu préfères le C.
--
;-)
|
|
| Back to top |
|
 |
dark poulpo Guest
|
Posted: Fri Jul 30, 2004 12:44 am Post subject: scanf() plante |
|
|
bonjour,
jai un probleme sur l'instrcution suivante;
if (sscanf(line, "%[^:]:%d", proxyname,port) == 2) // mon but est de
recuperer le serveur et le port dans une ligne de ce type www.kks.col:80rn
mais avec les : ca crach, si je remplace [^:] par [^;] par exemeple, ca
plante plus. quelqun peut m'aider? merci
|
|
| Back to top |
|
 |
drkm Guest
|
Posted: Fri Jul 30, 2004 1:20 am Post subject: Re: scanf() plante |
|
|
"dark poulpo" <syn-ack (AT) wanadoo (DOT) fr> writes:
| Quote: | jai un probleme sur l'instrcution suivante;
if (sscanf(line, "%[^:]:%d", proxyname,port) == 2) // mon but est de
recuperer le serveur et le port dans une ligne de ce type www.kks.col:80rn
mais avec les : ca crach, si je remplace [^:] par [^;] par exemeple, ca
plante plus. quelqun peut m'aider? merci
|
On dirait que tu essaies d'utiliser des expressions rationelles avec
`sscanf()'. Mais il n'y a pas de support des expressions rationelles
dans la bibliothèque C++ standard. Il existe plusieurs
implémentations, certaines en C++, beaucoup en C.
Tu peux notamment regarder du côté de Boost.Regex,
<URL:http://www.boost.org/>. Peut-être même as-tu la chance de
posséder une implémentation de std::tr1. Je ne sais pas s'il existe
déjà des implémentations de std::tr1::regexp, mais je pense qu'elle
est inspirée de la Boost.Regex de John Maddock.
Mais pour une telle chose, peut être ceci te suffit-il :
#include <iostream>
#include <sstream>
#include <string>
#include <utility>
std::pair< std::string , int >
decodeDomainAndPort( std::string const & input )
{
std::istringstream iss( input ) ;
std::string domain ;
int port ;
std::getline( iss , domain , ':' ) ;
iss >> port ;
return std::make_pair( domain , port ) ;
}
int main()
{
std::pair< std::string , int > decoded =
decodeDomainAndPort( "www.kks.col:80" ) ;
std::cout
<< "domain: ""
<< decoded.first
<< "", port: "
<< decoded.second
<< std::endl ;
}
--drkm, en recherche d'un stage : http://www.fgeorges.org/ipl/stage.html
|
|
| Back to top |
|
 |
drkm Guest
|
Posted: Fri Jul 30, 2004 1:23 am Post subject: Re: scanf() plante |
|
|
Fabien LE LEZ <gramster (AT) gramster (DOT) com> writes:
| Quote: | On Fri, 30 Jul 2004 02:44:48 +0200, "dark poulpo"
expression régulières|rationelles ("regular
expressions", je ne suis pas sûr de la traduction en français)
|
Je pense que la traduction exacte, venant de la théorie des
langages, est « expressions rationelles ». Même si O'Reilly sort un
livre sur les « expressions régulières ». AMHA, ils savent que tout
le monde comprend la seconde, qui est répandue et proche de l'anglais,
mais pas la première ...
--drkm, en recherche d'un stage : http://www.fgeorges.org/ipl/stage.html
|
|
| Back to top |
|
 |
Jean-Marc Bourguet Guest
|
Posted: Fri Jul 30, 2004 7:18 am Post subject: Re: scanf() plante |
|
|
drkm <usenet.fclcxx (AT) fgeorges (DOT) org> writes:
| Quote: | Fabien LE LEZ <gramster (AT) gramster (DOT) com> writes:
On Fri, 30 Jul 2004 02:44:48 +0200, "dark poulpo"
expression régulières|rationelles ("regular
expressions", je ne suis pas sûr de la traduction en français)
Je pense que la traduction exacte, venant de la théorie des
langages, est « expressions rationelles ». Même si O'Reilly sort un
livre sur les « expressions régulières ». AMHA, ils savent que tout
le monde comprend la seconde, qui est répandue et proche de l'anglais,
mais pas la première ...
|
J'ai tendance a reserver « expressions rationelles » pour les
contextes ou la definition precise de la théorie des langages est
necessaire et a utiliser « expressions régulières » quand on veut
specifier simplement des ensembles de chaines en se foutant que
celles-ci soient ou non des expressions rationelles.
A+
--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org
|
|
| Back to top |
|
 |
Marc Boyer Guest
|
Posted: Fri Jul 30, 2004 7:25 am Post subject: Re: scanf() plante |
|
|
drkm wrote:
| Quote: | Fabien LE LEZ <gramster (AT) gramster (DOT) com> writes:
On Fri, 30 Jul 2004 02:44:48 +0200, "dark poulpo"
expression régulières|rationelles ("regular
expressions", je ne suis pas sûr de la traduction en français)
Je pense que la traduction exacte, venant de la théorie des
langages, est « expressions rationelles ». Même si O'Reilly sort un
livre sur les « expressions régulières ». AMHA, ils savent que tout
le monde comprend la seconde, qui est répandue et proche de l'anglais,
mais pas la première ...
|
Pour préciser encore plus, un langage rationnel est un langage
reconnaissable par un automate, un langage regulier un langage
engendré par une expression régulière (globalement un terme
d'une algèbre sans point fixe), si mes souvenirs sont bons.
On montre que les deux familles sont équivalentes, et qu'on
peut donc utiliser l'un pour l'autre.
Marc Boyer
--
La contractualisation de la recherche, c'est me donner de l'argent pour
faire ce que je ne sais pas faire, que je fais donc mal, pendant que ce
que je sais faire, je le fais sans moyens...
|
|
| Back to top |
|
 |
Marc Boyer Guest
|
Posted: Fri Jul 30, 2004 8:19 am Post subject: Re: scanf() plante |
|
|
Jean-Marc Bourguet wrote:
| Quote: | J'ai tendance a reserver « expressions rationelles » pour les
contextes ou la definition precise de la théorie des langages est
necessaire et a utiliser « expressions régulières » quand on veut
specifier simplement des ensembles de chaines en se foutant que
celles-ci soient ou non des expressions rationelles.
|
Par pure curiosité, as-tu déjà manipulé un outil qui
permettait de traiter des expression régulière qui n'étaient
pas rationnelles ? (mais on va finir sur fr.comp.algo
ou fr.comp.divers si on continue)
Marc Boyer
--
La contractualisation de la recherche, c'est me donner de l'argent pour
faire ce que je ne sais pas faire, que je fais donc mal, pendant que ce
que je sais faire, je le fais sans moyens...
|
|
| Back to top |
|
 |
Jean-Marc Bourguet Guest
|
Posted: Fri Jul 30, 2004 8:52 am Post subject: Re: scanf() plante |
|
|
Marc Boyer <Marc.Boyer (AT) enseeiht (DOT) yahoo.fr.invalid> writes:
| Quote: | Jean-Marc Bourguet wrote:
J'ai tendance a reserver « expressions rationelles » pour les
contextes ou la definition precise de la théorie des langages est
necessaire et a utiliser « expressions régulières » quand on veut
specifier simplement des ensembles de chaines en se foutant que
celles-ci soient ou non des expressions rationelles.
Par pure curiosité, as-tu déjà manipulé un outil qui
permettait de traiter des expression régulière qui n'étaient
pas rationnelles ? (mais on va finir sur fr.comp.algo
ou fr.comp.divers si on continue)
|
Pour quelle definition d'expression reguliere? Les expressions
regulieres de perl ne sont pas verifiables par des automates a nombre
fini d'etats et ne sont pas specifiables par des grammaires de type 0.
Exemple d'une telle expression reguliere dans perl: /([0-9]+)1/
Je n'ai pas regarde celles de boost dans cet optique.
A+
--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org
|
|
| Back to top |
|
 |
Marc Boyer Guest
|
Posted: Fri Jul 30, 2004 8:57 am Post subject: Re: scanf() plante |
|
|
Jean-Marc Bourguet wrote:
| Quote: | Marc Boyer <Marc.Boyer (AT) enseeiht (DOT) yahoo.fr.invalid> writes:
Par pure curiosité, as-tu déjà manipulé un outil qui
permettait de traiter des expression régulière qui n'étaient
pas rationnelles ? (mais on va finir sur fr.comp.algo
ou fr.comp.divers si on continue)
Pour quelle definition d'expression reguliere? Les expressions
regulieres de perl ne sont pas verifiables par des automates a nombre
fini d'etats et ne sont pas specifiables par des grammaires de type 0.
Exemple d'une telle expression reguliere dans perl: /([0-9]+)1/
|
OK, merci
Marc Boyer
--
La contractualisation de la recherche, c'est me donner de l'argent pour
faire ce que je ne sais pas faire, que je fais donc mal, pendant que ce
que je sais faire, je le fais sans moyens...
|
|
| Back to top |
|
 |
Horst Kraemer Guest
|
Posted: Fri Jul 30, 2004 10:26 am Post subject: Re: scanf() plante |
|
|
"dark poulpo" <syn-ack (AT) wanadoo (DOT) fr> wrote:
| Quote: | bonjour,
jai un probleme sur l'instrcution suivante;
if (sscanf(line, "%[^:]:%d", proxyname,port) == 2) // mon but est de
recuperer le serveur et le port dans une ligne de ce type www.kks.col:80rn
mais avec les : ca crach, si je remplace [^:] par [^;] par exemeple, ca
plante plus. quelqun peut m'aider? merci
|
Ca plante probablement parce que 'port' ne passe pas l'adresse d'un
int mais une valeur...
#include <stdio.h>
int main()
{
char line[]="www.kks.col:80n";
char proxyname[100];
int port;
sscanf(line, "%[^:]:%d", proxyname,&port);
printf("%s:%d",proxyname,port);
return 0;
}
Ce programme donne le résultat attendu.
--
Horst
|
|
| Back to top |
|
 |
drkm Guest
|
Posted: Fri Jul 30, 2004 11:41 am Post subject: Re: scanf() plante |
|
|
Marc Boyer <Marc.Boyer (AT) enseeiht (DOT) yahoo.fr.invalid> writes:
| Quote: | Pour préciser encore plus, un langage rationnel est un langage
reconnaissable par un automate, un langage regulier un langage
engendré par une expression régulière (globalement un terme
d'une algèbre sans point fixe), si mes souvenirs sont bons.
On montre que les deux familles sont équivalentes, et qu'on
peut donc utiliser l'un pour l'autre.
|
Dans cette nomanclature (mis à part, à la lumière de l'article de
Jean Marc, qu'une « expression régulière n'est pas toujours
rationnelle »), l'« expression rationnelle » serait la chaîne que l'on
utilise pour chercher une correspondance, et l'« expression
régulière » le texte sur lequel on cherche cette correspondance.
C'est bien cela ?
--drkm, en recherche d'un stage : http://www.fgeorges.org/ipl/stage.html
|
|
| Back to top |
|
 |
Jean-Marc Bourguet Guest
|
Posted: Fri Jul 30, 2004 11:48 am Post subject: Re: scanf() plante |
|
|
drkm <usenet.fclcxx (AT) fgeorges (DOT) org> writes:
| Quote: | Marc Boyer <Marc.Boyer (AT) enseeiht (DOT) yahoo.fr.invalid> writes:
Pour préciser encore plus, un langage rationnel est un langage
reconnaissable par un automate, un langage regulier un langage
engendré par une expression régulière (globalement un terme
d'une algèbre sans point fixe), si mes souvenirs sont bons.
On montre que les deux familles sont équivalentes, et qu'on
peut donc utiliser l'un pour l'autre.
Dans cette nomanclature (mis à part, à la lumière de l'article de
Jean Marc, qu'une « expression régulière n'est pas toujours
rationnelle »), l'« expression rationnelle » serait la chaîne que l'on
utilise pour chercher une correspondance, et l'« expression
régulière » le texte sur lequel on cherche cette correspondance.
C'est bien cela ?
|
Non, ce que Marc ecrit est plutot:
- un langage rationnel est un langage reconnaissable par un
automate a nombre fini d'etats
- un langage regulier est un langage dont la grammaire est
reguliere (alias grammaire de type 0)
Oh, il se trouve que les deux sont identiques (les expressions
regulieres sont alors une maniere plus compacte de donner une
grammaire reguliere).
Mon usage est different, j'utilise "expression rationnelle" dans les
contextes où il est important que le langage soit definit par une
grammaire reguliere et "expression reguliere" dans les autres
contextes où on peut utiliser des syntaxes proches de celles utilisees
dans les expressions rationnelles pour definir des langages qui non
definissables par des grammaires regulieres (dans l'exemple que je
donnais avec perl, une grammaire de type 1 -- alias libre de contexte
-- ne suffit d'ailleurs pas, il faut au moins une grammaire de van
Wijgarden).
A+
--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org
|
|
| Back to top |
|
 |
Marc Boyer Guest
|
Posted: Fri Jul 30, 2004 12:10 pm Post subject: Re: scanf() plante |
|
|
Jean-Marc Bourguet wrote:
| Quote: | Mon usage est different, j'utilise "expression rationnelle" dans les
contextes où il est important que le langage soit definit par une
grammaire reguliere et "expression reguliere" dans les autres
contextes où on peut utiliser des syntaxes proches de celles utilisees
dans les expressions rationnelles pour definir des langages qui non
definissables par des grammaires regulieres
|
Ce qui paraît l'usage le plus raisonnable.
En fait, le limitant à un sous-ensemble de sed/grep/awk,
je n'avais jamais vu d'expression régulière non rationnelle,
mais grace à toi et à perl, j'en ai vue une ;-)
Donc, expressions régulières...
Marc Boyer
--
La contractualisation de la recherche, c'est me donner de l'argent pour
faire ce que je ne sais pas faire, que je fais donc mal, pendant que ce
que je sais faire, je le fais sans moyens...
|
|
| Back to top |
|
 |
kanze@gabi-soft.fr Guest
|
Posted: Sat Jul 31, 2004 2:35 am Post subject: Re: scanf() plante |
|
|
Marc Boyer <Marc.Boyer (AT) enseeiht (DOT) yahoo.fr.invalid> wrote
| Quote: | Jean-Marc Bourguet wrote:
Mon usage est different, j'utilise "expression rationnelle" dans les
contextes où il est important que le langage soit definit par une
grammaire reguliere et "expression reguliere" dans les autres
contextes où on peut utiliser des syntaxes proches de celles utilisees
dans les expressions rationnelles pour definir des langages qui non
definissables par des grammaires regulieres
Ce qui paraît l'usage le plus raisonnable.
En fait, le limitant à un sous-ensemble de sed/grep/awk,
je n'avais jamais vu d'expression régulière non rationnelle,
mais grace à toi et à perl, j'en ai vue une
|
Strictement parlant, je ne crois pas que sed/grep/awk sont
des expressions rationnelles, au sens mathematique du mot.
Sed, au moins, permet les (...), par exemple, et il me
semble qu'il y avait des exceptions ou des extensions en
grep et awk.
Pour une implementation rigueureuse des expressions rationnelles,
tu peux regarder a ma site, GB_RegExpr. Mais je te signale
d'avance que tu vas trouver qu'il manque des choses par rapport
a des expressions regulieres que tu connais de sed et al.
(En revanche, il peut etre tres, tres rapide, quand la quantite
de texte a chercher est importante. Precisement parce qu'il
construit un automat fini.)
| Quote: | Donc, expressions régulières...
|
Tout a fait. Moi aussi, j'aime la distinction de Jean-Marc.
Ca donne une precision supplementaire qui n'existe pas en
anglais.
--
James Kanze
|
|
| Back to top |
|
 |
Gabriel Dos Reis Guest
|
Posted: Sat Jul 31, 2004 7:59 am Post subject: Re: scanf() plante |
|
|
drkm <usenet.fclcxx (AT) fgeorges (DOT) org> writes:
| Quote: | Fabien LE LEZ <gramster (AT) gramster (DOT) com> writes:
On Fri, 30 Jul 2004 02:44:48 +0200, "dark poulpo"
expression régulières|rationelles ("regular
expressions", je ne suis pas sûr de la traduction en français)
Je pense que la traduction exacte, venant de la théorie des
langages, est « expressions rationelles ».
|
L'expression bénie, en France, est « expression rationnelle. »
[ Un jour, quelqu'un m'a raconté une obscure histoire comme quoi
« rationnelle » aurait un quelconque rapport avec les vraies fonctions
rationelles en math :
1/(1 - x) = 1 + x + x² + ... = x*
]
-- Gaby
|
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|