OVH Cloud OVH Cloud

C++ Interpreteur

16 réponses
Avatar
midtownmadnes52
Bonjour,
j'ai commencer la programmation en c++ Il y a de ca un bon moment. j'ai
apprit beaucoup. En ce moment mon programme doit lire un fichier de
configuration, et lire et interpr=E9t=E9 ce qui a dedans. le fichier est
construi comme ceci:

######################
# commentaire ici
######################
option =3D option;
option2 =3D option2;

BOn, les commentaire je susi capable de les enlever, les espace aussi,
mais a l'endroit que j'ai le plus de difficult=E9, est de stoker dans un
tableau les option =3D option; je bloque car=E9ment a cette place. Je vais
vous donner mon code, et serais bien gentil de m'aider un peu.

m_Error est la variable qui transmet les message d'erreur.

code:

int Conf::LoadConfig()
{
//cr=E9e un pointeur
FILE *FichConf;
int Carac;
int i;
int j,y;
int CONF[120][120];


//ouverture du fichier de configuration
if ((FichConf =3D fopen("config.conf", "r")) =3D=3D NULL)
{
m_Error =3D "Impossible d'ouvrir le fichier de Configuration.";
}

//Interpretation de la configuration
else {

while ((Carac =3D fgetc(FichConf)) !=3D EOF)
{
//SI c'est un commentaire
if (i =3D=3D 1){
if (Carac !=3D '\n'){
continue;
}
else{
i=3D0;
continue;
}

}




//S=E9paration des caractere
switch (Carac) {
//Commentaire
case '#' :
i =3D 1;
continue;

//espace
case ' ':
continue;

//d=E9limiteur de fonction
case '=3D':
i =3D 2;
continue;

//arrete de fonction
case ';':
i =3D 3;
continue;

default:

break;
}

//Trie des functions


printf("%c", Carac);

}


fclose(FichConf);
}
=20
}

Merci de votre pr=E9cieuse aide:)

6 réponses

1 2
Avatar
Pierre Maurette
Merci de vos réponce. Je crois que j'ai recu l'information
néssésaire pour réusir mon bout de code:)
Votre problème ressemble à celui de la lecture des INI "à la Windows

3.x".
Donnez à Google tout ou partie de:
c++ class library read write "ini files"
Vous trouverez peut-être le travail tout fait ou du code source pour un
avoir un truc réutilisable (dépend de vos contraintes).
J'utilise souvent TIniFile de Borland VCL/CLX, très pratique mais
réservé à Delphi/C++Builder/Kylix.

--
Pour répondre directement: enlever une lettre sur deux
wwaannaaddoooo -> wanadoo

Pierre Maurette

Avatar
Luc Hermitte
Hello.

wrote in news:1117729472.725574.27470
@g47g2000cwa.googlegroups.com:

Les MFC, ça existe encore ? Je croyais que même Microsoft
faisait mieux maintenant.


Il semblerait que cela soit encore maintenu finalement.
(si je m'en tiens au programme des journées C++ qu'ils ont organisées)

[...]
De toute façon, avec std::ifstream, std::string et boost::regex,
c'est l'affaire de quelque lignes, tout au plus.


Et avec boost.program_option encore plus "simple". (et cela se combine
assez bien avec les buffers filtrants :))


--
Luc Hermitte <hermitte at free.fr>
FAQ de <news:fr.comp.lang.c++> :
<http://www.cmla.ens-cachan.fr/Utilisateurs/dosreis/C++/FAQ/>
Dejanews : <http://groups.google.com/advanced_group_search>

Avatar
midtownmadnes52
humm, non c'est pas les ini, c'ets pas tout a fait pareil, car jai les
variable style

var =result;
et aussi faut je traite d'autre donné,
style
<VIRTUAL>
<balise>
<donné>
etc
</VIRTUAL>

un fichier de conf qui resemble a la apache:P
Avatar
kanze
Fabien LE LEZ wrote:
On 2 Jun 2005 09:16:31 -0700, :

boost::regex syntax( "s*(w*)s*=s*(w*)s*(?:#.*)?" ) ;


Désolé pour la digression, mais y a-t-il des liens entre les
regex façon Perl (comme ci-dessus) et les regex POSIX ?

J'ai l'impression que ce sont deux langages différents qui ont
le même nom...


Pas vraiment. La base est rigueureusement identique. Mais même à
l'intérieur de Posix, tu as des ajouts que ne comprend que
certains programmes, et pas d'autres. (Je crois, d'ailleurs,
qu'une des motivations au début de Perl, c'était de pouvoir tout
faire de ce qu'on fait à partir d'un shell Unix, mais avec une
syntaxe d'expression rationnelle unique:-).)

Il y a une mode Posix pour les expressions rationnelles de
Boost. Tu mets l'option qu'il faut, et il interprète comme
Posix. Sinon, les différences par rapport à ce u'il y a
la-dessus sont principaliement d'une part la présence des s et
des w, qui sont simplement des raccourcis pour [:space:] et
(grosso modo) [[:alnum:]_], et la sémantique des différents
parenthèses : sous Posix, (...) regroupe et sauvegarde ce qui
en correspond, et ( et ) sont des caractères normaux, tandis
qu'avec Boost, (...) regroupe et sauvegarde, il faut ( et )
pour chercher un parenthèse, et (?:...) regroupe sans le
sauvegarde. Si je voulais la syntaxe Posix, je pourrais écrire
quelque chose comme :

boost::regex syntax(
"[[:space::]]*([[::alnum:]][[:alnum:]]*)[[:space:]]*"
"=[[:space:]]*([[:alnum:]][[::alnum::]]*)[[:space:]]*"
"(|#.*)",
boost::regex::sed ) ;

Dans ce cas-là, boost_match va aussi sauver le contenu des
commentaires (mais je ne suis pas obligé à le lire, si ça ne
m'intéresse pas).

En passant, pour ce qui concerne la compatibilité Posix, Boost
offre basic, extended, awk, grep, egrep et sed -- selon quel
variant Posix on veut émuler:-). (Formellement, Posix définit
deux formes : « basic » et « extended ». Mais dans la
documentation de certains programmes, il y introduit des
variations sur ces formes.)

--
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


Avatar
kanze
Luc Hermitte wrote:

[...]
De toute façon, avec std::ifstream, std::string et
boost::regex, c'est l'affaire de quelque lignes, tout au
plus.


Et avec boost.program_option encore plus "simple". (et cela se
combine assez bien avec les buffers filtrants :))


C'est un package Boost que je n'ai pas encore eu le temps de
régarder.

Je voulais citer les buffers filtrants, mais je ne les ai pas
trouvé sur la page de Boost. Je sais qu'ils existe, parce qu'on
en a parlé dans clc++m -- j'y ai même jeté un coup d'oeil en
suivant le lien indiqué, et ils m'ont fait une très bonne
impression. (Beaucoup mieux que les petits bricolages que je
proposais à ma propre site.) Mais quand je vais à
http://www.boost.org/libs/libraries.htm, ils n'y sont pas.

--
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


Avatar
Luc Hermitte
wrote in news:1117783259.342562.305570
@g14g2000cwa.googlegroups.com:

Je voulais citer les buffers filtrants, mais je ne les ai pas
trouvé sur la page de Boost. Je sais qu'ils existe, parce qu'on
en a parlé dans clc++m -- j'y ai même jeté un coup d'oeil en
suivant le lien indiqué, et ils m'ont fait une très bonne
impression. (Beaucoup mieux que les petits bricolages que je
proposais à ma propre site.) Mais quand je vais à
http://www.boost.org/libs/libraries.htm, ils n'y sont pas.


J'en avais trouvé une implémentation dans les fichiers associés à la
mailing-list qui sont stockés sur yahoo-groups. (Il faut être inscrit
pour y avoir accès).

Je ne saurais pas te ressortir le nom de tête, d'autant qu'entre deux
versions il y avait eu un changement de nom.
Il me semble qu'il y avait encore eu des remaniement après cela (la
version que j'avais vue remonte à un an et demi, deux ans, je crois).

Bref c'est de l'expérimental pas encore intégré => regarder sur yahoo-
groups ou dans la sand-box.

--
Luc Hermitte <hermitte at free.fr>
FAQ de <news:fr.comp.lang.c++> :
<http://www.cmla.ens-cachan.fr/Utilisateurs/dosreis/C++/FAQ/>
Dejanews : <http://groups.google.com/advanced_group_search>

1 2