C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

scanf() plante
Goto page 1, 2  Next
 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French)
View previous topic :: View next topic  
Author Message
Fabien LE LEZ
Guest





PostPosted: Fri Jul 30, 2004 12:43 am    Post subject: Re: scanf() plante Reply with quote



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





PostPosted: Fri Jul 30, 2004 12:44 am    Post subject: scanf() plante Reply with 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




Back to top
drkm
Guest





PostPosted: Fri Jul 30, 2004 1:20 am    Post subject: Re: scanf() plante Reply with quote



"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





PostPosted: Fri Jul 30, 2004 1:23 am    Post subject: Re: scanf() plante Reply with quote

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





PostPosted: Fri Jul 30, 2004 7:18 am    Post subject: Re: scanf() plante Reply with quote

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





PostPosted: Fri Jul 30, 2004 7:25 am    Post subject: Re: scanf() plante Reply with quote

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





PostPosted: Fri Jul 30, 2004 8:19 am    Post subject: Re: scanf() plante Reply with quote

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





PostPosted: Fri Jul 30, 2004 8:52 am    Post subject: Re: scanf() plante Reply with quote

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





PostPosted: Fri Jul 30, 2004 8:57 am    Post subject: Re: scanf() plante Reply with quote

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





PostPosted: Fri Jul 30, 2004 10:26 am    Post subject: Re: scanf() plante Reply with quote

"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





PostPosted: Fri Jul 30, 2004 11:41 am    Post subject: Re: scanf() plante Reply with quote

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





PostPosted: Fri Jul 30, 2004 11:48 am    Post subject: Re: scanf() plante Reply with quote

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





PostPosted: Fri Jul 30, 2004 12:10 pm    Post subject: Re: scanf() plante Reply with quote

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





PostPosted: Sat Jul 31, 2004 2:35 am    Post subject: Re: scanf() plante Reply with quote

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 Wink

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





PostPosted: Sat Jul 31, 2004 7:59 am    Post subject: Re: scanf() plante Reply with quote

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
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French) All times are GMT
Goto page 1, 2  Next
Page 1 of 2

 
Jump to:  
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


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.