• 06 Mai 2024, 06:42:46


Auteur Sujet: [TUTO]Dini.inc  (Lu 7762 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne cristab

  • *
  • Messages: 8379
    • Voir le profil
[TUTO]Dini.inc
« le: 06 Janvier 2011, 12:59:18 »

    by Cristab

Bonjour avant de commencer vous devrez télécharger l'include Dini sur le site de son créateur DracoBlue (http://dracoblue.com)

Voila une chose faite placer dans pawno/include

pour nous en servir il va falloir l'indiquer au compilot

Code: (pawn) [Sélectionner]
#include <a_samp>
#include <Dini>

tout simplement.

Desormais, ouvrez le avec bloc note ou notepad comme bon vous semble et regardons cette include

première fonction

Code: (pawn) [Sélectionner]
stock dini_Exists(filename[]) {
return fexist(filename);
}

là on peut remarquer que ça retourne juste à une fonction par défaut le fexist cf(voir le tuto de Syg Les fonctions de gestion des fichiers) Donc je ne me sens pas dans l'obligation de vous expliquer cette fonction.

seconde fonction

Code: (pawn) [Sélectionner]
stock dini_Remove(filename[]) {
return fremove(filename);
}
Tout comme la fonction précédente référer vous au tuto de Syg.

troisieme fonction


Code: (pawn) [Sélectionner]
stock dini_Create(filename[]) {
if (fexist(filename)) return false;
new File:fhnd;
fhnd=fopen(filename,io_write);
if (fhnd) {
fclose(fhnd);
return true;
}
return false;
}

Ah enfin une vraie fonction ^^ comme son nom l'indique c'est pour créer un fichier exemple dini_Creat("Monfichier.txt");

votre fichier est créer.

Mais comment être sure qu'il est créer si je suis en jeu et que je ne peu pas regarder ma console.

Je vous donne un petit truc bien sur c'est juste pour que vous testiez

Code: (pawn) [Sélectionner]
public OnPlayerCommandText(playerid, cmdtext[])
{
if (strcmp("/fichier", cmdtext, true) == 0)
{
if(fexist("Monfichier.txt"))
{
SendClientMessage(playerid,0x00FF33AA,"Fichier la");
}
else
{
SendClientMessage(playerid,0xFF0000FF,"Fichier pas la");
}
return 1;
}
return 0;
}

quatrième fonction


Code: (pawn) [Sélectionner]
stock dini_Set(filename[],key[],value[]) {
// If we have no key, it can't be set
// we also have no chance to set the value, if all together is bigger then the max string
new key_length = strlen(key);
new value_length = strlen(value);
if (key_length==0 || key_length+value_length+2>DINI_MAX_STRING) return false;

new File:fohnd, File:fwhnd;
new tmpres[DINI_MAX_STRING];
new bool:wasset=false;

// Let's remove the old *.part file if there was one.
format(tmpres,sizeof(tmpres),"%s.part",filename);
fremove(tmpres);

// We'll open the source file.
fohnd=fopen(filename,io_read);
if (!fohnd) return false;

fwhnd=fopen(tmpres,io_write);
if (!fwhnd) {
// we can't open the second file for writing, so .. let's close the open one and exit.
fclose(fohnd);
return false;
}

while (fread(fohnd,tmpres)) {
if (
!wasset
&& tmpres[key_length]=='='
&& !strcmp(tmpres, key, true, key_length)
) {
// We've got what needs to be replaced!
format(tmpres,sizeof(tmpres),"%s=%s",key,value);
wasset=true;
} else {
DINI_StripNewLine(tmpres);
}
fwrite(fwhnd,tmpres);
fwrite(fwhnd,"\r\n");
}

if (!wasset) {
format(tmpres,sizeof(tmpres),"%s=%s",key,value);
fwrite(fwhnd,tmpres);
fwrite(fwhnd,"\r\n");
}

fclose(fohnd);
fclose(fwhnd);

format(tmpres,sizeof(tmpres),"%s.part",filename);
if (DINI_fcopytextfile(tmpres,filename)) {
return fremove(tmpres);
}
return false;
}

Aoutch!!!! en v'la une fonction ^^

Ce n'est rien, ça va uniquement servir à stocker par exemple un mot ou un pseudo dini_Set("Monfichier.txt","test1","je suis un test");
vous trouverez ceci dans le fichier Monfichier.txt
Citer
test1=je suis un test

n'est-ce pas magique :)

cinquième fonction

Code: (pawn) [Sélectionner]
stock dini_IntSet(filename[],key[],value) {
   new valuestring[DINI_MAX_STRING];
   format(valuestring,DINI_MAX_STRING,"%d",value);
   return dini_Set(filename,key,valuestring);
}

cette fonction va servire a stoker la valeur d'un variable dini_IntSet("Monfichier.txt","test2",56); vous trouverez ceci dans le fichier Monfichier.txt
Citer
test2=56

sixieme fonction
Code: (pawn) [Sélectionner]
stock dini_Int(filename[],key[]) {
   return strval(dini_Get(filename,key));
}

cette fonction va nous servir à récupérer la variable a la ligne test2

Code: (pawn) [Sélectionner]
new mavar;
mavar = dini_Int("Monfichier.txt","test2");
printf("%d",mavar);

ce code devrais vous donnez le numéro 56 :)

septième fonction

Code: (pawn) [Sélectionner]
stock dini_FloatSet(filename[],key[],Float:value) {
   new valuestring[DINI_MAX_STRING];
   format(valuestring,DINI_MAX_STRING,"%f",value);
   return dini_Set(filename,key,valuestring);
}


cette fonction va vous permettre de stocker un Float soit une position ce qui est le plus utiliser dini_FloatSet("Monfichier.txt","test3",1.235);

ce qui vous donneras dans le fichier Monfichier.txt
Citer
test3=1.235

huitième fonction

Code: (pawn) [Sélectionner]
stock Float:dini_Float(filename[],key[]) {
   return floatstr(dini_Get(filename,key));
}

cette fonction va nous servire a recupere un float précedement enregistrer dans un fichier

exemple

Code: (pawn) [Sélectionner]
new Float:mapos;
mapos = dini_Float("Monfichier.txt","test3");
printf("test 3 %f",mapos);


neuvième fonction

Code: (pawn) [Sélectionner]
stock dini_Bool(filename[],key[]) {
   return strval(dini_Get(filename,key));
}

celle ci tres peu utiliser sert a recuperer une booléenne c'est a dire 1 ou 0 (voir prochaine fonction)

dixième fonction

Code: (pawn) [Sélectionner]
stock dini_BoolSet(filename[],key[],value) {
if (value) {
return dini_Set(filename,key,"1");
}
return dini_Set(filename,key,"0");
}

voila la fonction qui va permettre de sauver une booléenne exemple dini_BoolSet("Monfichier.txt","test4",0); ici il enregistreras 0 par contre si je met la valeur a 1 il mettras 1 mais je ne peu pas mettre 2 ou autre chose dini_BoolSet("Monfichier.txt","test5",1);

pour verifier ceci

Code: (pawn) [Sélectionner]
new bool1;
new bool2;
bool1=dini_Bool("Monfichier.txt","test4") ;
bool2=dini_Bool("Monfichier.txt","test5") ;
printf("bool1=%d   bool2=%d",bool1,bool2);

Onzième fonction

Code: (pawn) [Sélectionner]
stock dini_Unset(filename[],key[]) {
// If we have no key, it can't be set
// we also have no chance to unset the key, if all together is bigger then the max string
new key_length = strlen(key);
if (key_length==0 || key_length+2>DINI_MAX_STRING) return false;

new File:fohnd, File:fwhnd;
new tmpres[DINI_MAX_STRING];

// Let's remove the old *.part file if there was one.
format(tmpres,DINI_MAX_STRING,"%s.part",filename);
fremove(tmpres);

// We'll open the source file.
fohnd=fopen(filename,io_read);
if (!fohnd) return false;

fwhnd=fopen(tmpres,io_write);
if (!fwhnd) {
// we can't open the second file for writing, so .. let's close the open one and exit.
fclose(fohnd);
return false;
}

while (fread(fohnd,tmpres)) {
if (
tmpres[key_length]=='='
&& !strcmp(tmpres, key, true, key_length)
) {
// We've got what needs to be removed!
} else {
DINI_StripNewLine(tmpres);
fwrite(fwhnd,tmpres);
fwrite(fwhnd,"\r\n");
}
}

fclose(fohnd);
fclose(fwhnd);

format(tmpres,DINI_MAX_STRING,"%s.part",filename);
if (DINI_fcopytextfile(tmpres,filename)) {
return fremove(tmpres);
}
return false;
}

cette fonction sert à retirer une ligne d'un fichier exemple dini_Unset("Monfichier.txt","test4");

voila la ligne 4 est supprimer du fichier.

douzième fonction


Code: (pawn) [Sélectionner]
stock dini_Get(filename[],key[]) {
new tmpres[DINI_MAX_STRING];

new key_length = strlen(key);
if (key_length==0 || key_length+2>DINI_MAX_STRING) return tmpres;

new File:fohnd;
fohnd=fopen(filename,io_read);
if (!fohnd) return tmpres;

while (fread(fohnd,tmpres)) {
if (
tmpres[key_length]=='='
&& !strcmp(tmpres, key, true, key_length)
) {
/* We've got what we need */
DINI_StripNewLine(tmpres);
strmid(tmpres, tmpres, key_length + 1, strlen(tmpres), DINI_MAX_STRING);
fclose(fohnd);
return tmpres;
}
}
fclose(fohnd);
return tmpres;
}

Voila la fonction qui va nous permettre de recuperer notre phrase a la ligne test comme ci dessous

Code: (pawn) [Sélectionner]
new txt[256];
txt = dini_Get("Monfichier.txt","test1");
printf("ma phrase ligne test1 est = %s",txt);

treizième fonction

Code: (pawn) [Sélectionner]
stock dini_Isset(filename[],key[]) {
new key_length = strlen(key);
if (key_length==0 || key_length+2>DINI_MAX_STRING) return false;

new File:fohnd;
fohnd=fopen(filename,io_read);
if (!fohnd) return false;

new tmpres[DINI_MAX_STRING];
while (fread(fohnd,tmpres)) {
if (
tmpres[key_length]=='='
&&  !strcmp(tmpres, key, true, key_length)
) {
// We've got what we need
fclose(fohnd);
return true;
}
}
fclose(fohnd);
return false;
}

Voila une fonction qui va permettre de verifier si tel ligne existe dans le fichier exemple

Code: (pawn) [Sélectionner]
if(dini_Isset("Monfichier.txt","ligne") )
{
   print("la ligne exist");
}
else
{
   print("la ligne exist pas");
}

a vous de tester :)


Les fonction interne à l'include mais qui peuvent peut-être vous servir

Code: (pawn) [Sélectionner]
stock DINI_StripNewLine(string[]) {
new len = strlen(string);
if (string[0]==0) return ;
if ((string[len - 1] == '\n') || (string[len - 1] == '\r')) {
string[len - 1] = 0;
if (string[0]==0) return ;
if ((string[len - 2] == '\n') || (string[len - 2] == '\r')) string[len - 2] = 0;
}
}

stock DINI_fcopytextfile(oldname[],newname[]) {
new File:ohnd,File:nhnd;
if (!fexist(oldname)) return false;
ohnd=fopen(oldname,io_read);
if (!ohnd) return false;
nhnd=fopen(newname,io_write);
if (!nhnd) {
fclose(ohnd);
return false;
}
new tmpres[DINI_MAX_STRING];
while (fread(ohnd,tmpres)) {
DINI_StripNewLine(tmpres);
format(tmpres,sizeof(tmpres),"%s\r\n",tmpres);
fwrite(nhnd,tmpres);
}
fclose(ohnd);
fclose(nhnd);
return true;
}

voila petite astuce vous désireriez voir dini sur le côté comme les include par default ajouter ce qui suis a votre include

Citer
/*native dini_Exists(filename[]);
native dini_Remove(filename[]);
native dini_Create(filename[]);
native dini_Set(filename[],key[],value[]);
native dini_IntSet(filename[],key[],value);
native dini_Int(filename[],key[]);
native dini_FloatSet(filename[],key[],Float:value);
native dini_Float(filename[],key[]);
native dini_Bool(filename[],key[]);
native dini_BoolSet(filename[],key[],value);
native dini_Unset(filename[],key[]);
native dini_Get(filename[],key[]);
native dini_Isset(filename[],key[]);
native DINI_StripNewLine(string[]);
native DINI_fcopytextfile(oldname[],newname[]);*/

juste apres
Citer
#if defined MAX_STRING
#define DINI_MAX_STRING MAX_STRING
#else
#define DINI_MAX_STRING 255
#endif

et vous obtiendrez ceci



Voila je tenterais de répondre a vos question trouvez en pièce jointe le fichier .pwn realiser le long de ce tuto.
« Modifié: 25 Août 2013, 13:44:43 par cristab »
pas d'aide en PM, vous êtes sur un forum est il me semble que vous êtes la pour avoir de l'aide donc pourquoi MP une seul personne qui ne vous répondra pas alors qu'il y a plein de membre ici

Karting06

  • Invité
Re : [TUTO]Dini.inc
« Réponse #1 le: 06 Janvier 2011, 14:18:31 »
Tuto très intéressant !!!
Mais ce ne serait pas mieux de le mettre dans la section Tuto?

Hors ligne cristab

  • *
  • Messages: 8379
    • Voir le profil
Re : [TUTO]Dini.inc
« Réponse #2 le: 06 Janvier 2011, 14:22:27 »
un moderateur le deplaceras si juger utile ou pas
pas d'aide en PM, vous êtes sur un forum est il me semble que vous êtes la pour avoir de l'aide donc pourquoi MP une seul personne qui ne vous répondra pas alors qu'il y a plein de membre ici

Hors ligne chneubeul

  • *
  • Gangster
  • GTA Online Addict :)
  • Messages: 1132
    • Voir le profil
Re : [TUTO]Dini.inc
« Réponse #3 le: 06 Janvier 2011, 17:31:51 »
Bravo Cristab :p

Hors ligne Nesik

  • *
  • Grand Banditisme
  • Messages: 674
    • Voir le profil
    • Uknow
Re : [TUTO]Dini.inc
« Réponse #4 le: 06 Janvier 2011, 18:06:49 »
Merci  :D
Juste une question :
Pourquoi les commentaires dans les bouts de script sont en anglais ?  :lmfao

Hors ligne Xartrick

  • *
  • C & Pawn Programmer
  • Messages: 1391
    • Voir le profil
    • Xartrick's Area
Re : [TUTO]Dini.inc
« Réponse #5 le: 06 Janvier 2011, 18:11:43 »
Une simple habitude je pense, je commente également mon code en Anglais.

Hors ligne cristab

  • *
  • Messages: 8379
    • Voir le profil
Re : [TUTO]Dini.inc
« Réponse #6 le: 06 Janvier 2011, 18:20:59 »
les commentaire sont dans l'include Dini si tu prend la peine de visiter le site du createur de cette include tu t'appercevras qu'il n'est pas français ...
pas d'aide en PM, vous êtes sur un forum est il me semble que vous êtes la pour avoir de l'aide donc pourquoi MP une seul personne qui ne vous répondra pas alors qu'il y a plein de membre ici

Hors ligne Xolokos

  • PAWN/XHTML/CSS/PHP/SQL/JS
  • *
  • Grand Banditisme
  • What are you waiting for ?
  • Messages: 681
    • Voir le profil
Re : [TUTO]Dini.inc
« Réponse #7 le: 06 Janvier 2011, 19:30:16 »
Bon Tutoriel G-G et il est normal que les commentaires sois en Anglais c'est "basiquement" le langage le plus parler du monde...
Donc merci du tutoriel Cristab.
Nippah !

Hors ligne S!m

  • *
  • Messages: 2341
    • Voir le profil
Re : Re : [TUTO]Dini.inc
« Réponse #8 le: 07 Janvier 2011, 00:43:45 »
Salut,

Bon Tutoriel G-G et il est normal que les commentaires sois en Anglais c'est "basiquement" le langage le plus parler du monde...
Donc merci du tutoriel Cristab.

pas tout à fait, toutefois, c'est celui qui est le plus utilisé de loin en informatique (et en sciences).

bravo cristab, très beau tutoriel.
Peut-être que ce serait bien d'ajouter une petite section expliquant la structure d'un fichier avec dini (même si c'est très simple), les avantages de cette méthodes et ses inconvénients (et limites)?

++Sim++





Hors ligne cristab

  • *
  • Messages: 8379
    • Voir le profil
Re : [TUTO]Dini.inc
« Réponse #9 le: 07 Janvier 2011, 09:12:06 »
je vais tenter de fignoler tout sa :)
pas d'aide en PM, vous êtes sur un forum est il me semble que vous êtes la pour avoir de l'aide donc pourquoi MP une seul personne qui ne vous répondra pas alors qu'il y a plein de membre ici

Hors ligne Xolokos

  • PAWN/XHTML/CSS/PHP/SQL/JS
  • *
  • Grand Banditisme
  • What are you waiting for ?
  • Messages: 681
    • Voir le profil
Re : [TUTO]Dini.inc
« Réponse #10 le: 07 Janvier 2011, 18:23:00 »
Citer
pas tout à fait, toutefois, c'est celui qui est le plus utilisé de loin en informatique (et en sciences).

bravo cristab, très beau tutoriel.
Peut-être que ce serait bien d'ajouter une petite section expliquant la structure d'un fichier avec dini (même si c'est très simple), les avantages de cette méthodes et ses inconvénients (et limites)?
++Sim++

Oui, mais la plus part des gens le comprenne, j'ai entendue dire que d'ici 2015 on enseigneras le Chinois en maternelle.
Et je suis d'acord avec toi Sim mais pas sur le ^^*
Citer
dini (même si c'est très simple)
++ Xo
Nippah !

Hors ligne S!m

  • *
  • Messages: 2341
    • Voir le profil
Re : Re : [TUTO]Dini.inc
« Réponse #11 le: 07 Janvier 2011, 22:48:26 »
Salut,

Et je suis d'acord avec toi Sim mais pas sur le ^^*
Citer
dini (même si c'est très simple)

Tu n'est pas d'accord que la structure d'un fichier créer avec dini est simple?
Pourtant un tel fichier ne comporte que des identifiants (key) avec la valeur associé.
On en met plusieurs et voila le plus compliqué que l'on peut faire.

Citer
pseudo=Sim
pass=****
level=0
argent=10000
Ce n'est pas très compliqué comme structure.

Si ce n'est pas ce que tu voulais dire, essaie de reformuler ou être plus précis.

++Sim++





Hors ligne Brian Turner

  • PAWN/PHP/SQL/MAP/SQUIRIEL
  • *
  • Bandit
  • Messages: 438
    • Voir le profil
Re : [TUTO]Dini.inc
« Réponse #12 le: 15 Janvier 2011, 14:33:05 »
Merci sur le tuto, maintenant j'en sais plus, je pense que je vais l'utilisé vu comment c'est simple.
Momoto33127
__________________________________________
[TRADUCTION][FS]Celular call 1.5 : Voir le poste
[ADDON/INC]Motor System (/clef et /vsortir pour Gveh) : Voir le poste
[FS]BanList (BlackListe) [Systeme de BAN] : Voir le poste