Projet en C: cree un fichier de configuration

Fermé
poparnassus Messages postés 426 Date d'inscription vendredi 28 mars 2014 Statut Membre Dernière intervention 25 décembre 2019 - 30 avril 2017 à 04:21
[Dal] Messages postés 6193 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 4 juillet 2024 - 5 mai 2017 à 09:40
Bonjour,

je developpe en C avec codeblock, et je suis sur les sockets, du coup je voudrais crée un fichier qui soit configurable pour les adresse ip , port etc;

j'ai trouver ca comme info mais cest avec visual
https://nico-pyright.developpez.com/tutoriel/vc2005/configurationsectioncsharp/

Comment on procede avec codeblock ?

A voir également:

1 réponse

[Dal] Messages postés 6193 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 4 juillet 2024 1 090
2 mai 2017 à 10:16
Salut poparnassus,

Si c'est pour ton projet utilisant la SDL, tu peux installer SDL_Config et créer un fichier au format .ini

http://koshmaar.linuxpl.info/sdl_config/news.php
https://fr.wikipedia.org/wiki/Fichier_INI

cela te donnera un code portable sur les plateformes supportées par la SDL

Si tu fais du code spécifique Windows, tu peux aussi utiliser GetPrivateProfileString : https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-getprivateprofilestring?redirectedfrom=MSDN

Les fichiers .ini sont les ancêtres de la base de registre sous Windows.

Le format est assez simple, et si tu n'as pas des besoins complexes, tu peux même parser toi même le fichier.


Dal
1
poparnassus Messages postés 426 Date d'inscription vendredi 28 mars 2014 Statut Membre Dernière intervention 25 décembre 2019 30
4 mai 2017 à 23:31
Ok je vais voir ça tout de suite !

Je te remercie Dal , tu as toujours réponse à tout !!
0
poparnassus Messages postés 426 Date d'inscription vendredi 28 mars 2014 Statut Membre Dernière intervention 25 décembre 2019 30
4 mai 2017 à 23:38
J'avais poster sur un autre forum et on m'a dit de faire comme ca, tu en penses quoi ? Cest une bonne methode ?



FILE *fopen(constchar*filename,constchar*mode)
int fscanf(FILE *stream,constchar*format,...) :
par exemple un fichier texte nommé exemple et situé dans le même répertoire que ton exécutable qui contient :

ip 1.1.1.1  


<br>#include <stdio.h>
#include <stdlib.h>

int main(){
FILE *fichier;
char champ[50];
char ip[50];
fichier = fopen("exemple.txt", "r");
if(fichier!=NULL){
fscanf(fichier,"%s %s", champ, ip);
printf("Le premier champ est une %s et le paramètre est : %s\n", champ, ip);
}
else{
printf("Le fichier n'existe pas\n");
}
}


-
Edité par Magarto 2 mai 2017 à 14:55:01


magma

Signaler Citer
2 mai 2017 à 15:09:29

Tu peux mettre tous les paramètres dont tu as besoin dans une structure et écrire/lire cette structure d'un seul coup avec les fonctions fwrite()/fread() ...
0
[Dal] Messages postés 6193 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 4 juillet 2024 1 090
Modifié le 5 mai 2017 à 09:46
Pour la suggestion de "magma", si tu veux un fichier pour les humains, fwrite / fread pour stocker les struct sous forme binaire ne va pas remplir ce besoin. De plus les données ne seront utilisables que sur la même architecture.

Ecrire sous forme de texte, avec un format simple est ce que je te proposais avec un format connu et des parsers existants, ou ton propre parser, et, bien sûr, tu peux faire ton propre format encore plus simplifié.

Les humains ont souvent besoin de commentaires, tu peux par exemple déterminer que les lignes vides, ou commençant par un ";" (à la Windows) ou un "#" (à la Unix) sont ignorées, et contiennent des commentaires, ou que si ces caractères sont rencontrés dans une ligne ce qui suit ce caractère jusqu'à la fin de la ligne est un commentaire.

Sur le code lui-même, en dehors du fait que le prototype
main()
est incorrect et que le
return 0;
est manquant, le code n'est pas très robuste, et il faudrait complexifier un peu pour faire une gestion d'erreurs.

J'utiliserais
fgets()
pour lire une ligne, et ensuite je parserais la ligne avec
sscanf()
pour vérifier son format et l'interpréter. Si la ligne est plus longue que tampon de lecture (à ce moment là le dernier caractère du tampon ne sera pas '\n'), tu pourras aussi décider quoi faire de ce que tu as lu et du reste de la ligne, voire considérer de tout ignorer et considérer qu'une ligne plus longue qu'une certaine taille est une erreur de format (sauf si c'est un commentaire qui occasionne cela).

Les parsers déjà faits doivent normalement gérer toutes ces situations..., et gèrent non seulement la lecture, mais aussi l'écriture. A toi de voir :-)

Sinon, parmi les formats populaires, aujourd'hui la mode est plutôt à YAML, qui a libyaml pour le C. C'est peut-être un tank pour battre une mouche dans ton cas, mais c'est vraiment sympa à utiliser et très lisible même pour représenter des choses complexes.


Dal
0