Jump to content

[INC] QINI ! NEW REVOLUTION INI SYSTEM !


Guest QWERův druhý účet

Recommended Posts

Guest QWERův druhý účet

Čaute, s veľkou radosťou vám predstavujem môj vlastný ini systém. Volá sa 'qini' !

 

Download

 

Testy rýchlosti

cyklus bol nastavený na hodnotu '100'

[00] DINI: 4349

[00] QINI: 1039

 

Funkcie

// Vytvorí súbor
qini_Create(file[])
// Zmaže súbor
qini_Remove(file[])
// Pridá do súboru ďalší riadok ('key=value')
qini_Int(key[],value)
// Zistí integer zo súboru
qini_IntGet(key[])
// Uloží float do súboru
qini_Float(key[],Float:value)
// Zistí float zo súboru
qini_FloatGet(key[])
// Uloží do súboru boolean
qini_Bool(key[],value)
// Zistí zo súboru boolean
qini_BoolGet(key[])
// Otvorí súbor
qini_Open(file[])
// Uloží string do súboru
qini_Set(key[],value[])
// Zistí string zo súboru
qini_Get(key[])
// Zatvorí a ULOŽÍ súbor
qini_Close()
// Zahashuje string
hash(str2[]) // by DracoBlue

 

Ukážkový script

new ServerStarted;
public OnGameModeInit(){
qini_Create("ServerStats.txt");// Vytvoríme súbor
qini_Open("ServerStats.txt"); // Otvoríme súbor
ServerStarted = qini_Get("Started"); // uložíme do premeny hodnotu získanú zo súboru
qini_Int("Started",ServerStarted+1); // uložíme do súboru novú hodnotu
qini_Close(); // zapíšeme a zavreme súbor
}

 

Jednoduché nie ? Prosím ľudí typu "použite radšej obyčajné fwrite" nech to nepíšu... Ja viem že to je lepšie... ale ini je komfort...

 

Čoskoro sem dám návod na registráciu a podobné kravinky.

S pozdravom

QWER

Link to comment
Share on other sites

ServerStarted = dini_Get("Started"); // uložíme do premeny hodnotu získanú zo súboru

 

proč dini_get, proč né qini_get :) ! :d

 

 

Využiju ale až budu dělat něco hoodně zátěžovýho (joke)

 

btw 600. příspěvek !

Link to comment
Share on other sites

ServerStarted = dini_Get("Started"); // uložíme do premeny hodnotu získanú zo súboru

 

proč dini_get, proč né qini_get :) ! :d

 

 

Využiju ale až budu dělat něco hoodně zátěžovýho (joke)

 

btw 600. příspěvek !

Link to comment
Share on other sites

Guest QWERův druhý účet

prestanem nadávať až keď nebudeš mať dutú lebeňu...

najprv sa nauč čo to je ini...

ja viem že nepoznáš google, preto tu máš link na wiki

http://en.wikipedia.org/wiki/INI_file

...

všetky ini systémy sú na rovnakom princípe lebo ten systém ini nebude inakší...

 

btw

 

a aby si VIDEL lebo ty vidíš (hore som už písal čo vidíš) ... tak tu máš rozdiel... (základné rozdiely)

 

 

qini ukladá hodnoty do premenných čo narozdiel od dini vždy cyklujl... preto tá rýchlosť...

 


stock  dini_Set(filename[],key[],value[]) {
new File:fohnd, File:fwhnd;
new bool:wasset=false;
new tmpres[MAX_STRING];
if (key[0]==0) return false; /* If we have no sign in key, it can't be set*/
format(tmpres,sizeof(tmpres),"%s.part",filename);
fohnd=fopen(filename,io_read);
if (!fohnd) return false;
fremove(tmpres);
fwhnd=fopen(tmpres,io_write);
//  if (!fwhnd) return false;
while (fread(fohnd,tmpres)) {
	StripNewLine(tmpres);
	if ((!wasset)&&(equal(dini_PRIVATE_ExtractKey(tmpres),key,true))) {
		/* We've got what needs to be replaced! */
		format(tmpres,sizeof(tmpres),"%s=%s",key,value);
		wasset=true;
	}
	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 (fcopytextfile(tmpres,filename)) {
	return fremove(tmpres);
}
return false;
}

 

Vždy keď použieš dini_Set tak sa prečítajú všeky riadky, zmaže súbor, vytvorí nový a zapíše... a ak máš pod sebou 10x použité

dini_Set(filename[],key[],value[]);

tak 10x zmaže a a vytvorí súbor + prečíta všetky riadky a zapíše do nového... a tu je

qini

stock qini_Set(key[],value[]){
new qline = -1;
new bool:findet = false;
while((qline < qLines) && (qline < MAX_LINE)){
qline++;
    if(!qKey[qline][0]) continue;
	if(strcmp(key,qKey[qline],false) == 0){
		format(qValue[qline],MAX_VALUE,value);
//			printf("%s | %s | %s | %d | %d",qValue[qline],key,qKey[qline],qline,qLines);
		findet = true;
		break;
	}
}
if(!findet){
qLines++;
format(qKey[qLines],MAX_KEY,key);
format(qValue[qLines],MAX_VALUE,value);
//	printf("!!!!!!!!!!!!!!!!!!!!!!!!!%s=%s!!!!!!!!!!!!!!!!!!!!!!!!!!",qKey[qLines],qValue[qLines]);
}
}

 

tu uloží do premenej...

omfg....

 

---- EDIT ----

 

A pozrime si qini_Get & dini_Get

 

stock  dini_Get(filename[],key[]) {
new File:fohnd;
new tmpres[MAX_STRING];
new tmpres2[MAX_STRING];
tmpres[0]=0;
fohnd=fopen(filename,io_read);
if (!fohnd) return tmpres;
while (fread(fohnd,tmpres)) {
	StripNewLine(tmpres);
	if (equal(dini_PRIVATE_ExtractKey(tmpres),key,true)) {
		/* We've got what we need */
		tmpres2[0]=0;
		strcat(tmpres2,dini_PRIVATE_ExtractValue(tmpres));
		fclose(fohnd);
		return tmpres2;
	}
}
fclose(fohnd);
return tmpres;
}

Zase otvára súbor a cyklý

 

a qini



stock qini_Get(key[]){
new qline = -1;
while((qline < qLines) && (qline < MAX_LINE)){
qline++;
	if(!strcmp(key,qKey[qline],false)){
	return qValue[qline];
 		}
  }
  return qValue[0];
}

 

vidíš ten rozdiel ?

Link to comment
Share on other sites

Guest QWERův druhý účet

prestanem nadávať až keď nebudeš mať dutú lebeňu...

najprv sa nauč čo to je ini...

ja viem že nepoznáš google, preto tu máš link na wiki

http://en.wikipedia.org/wiki/INI_file

...

všetky ini systémy sú na rovnakom princípe lebo ten systém ini nebude inakší...

 

btw

 

a aby si VIDEL lebo ty vidíš (hore som už písal čo vidíš) ... tak tu máš rozdiel... (základné rozdiely)

 

 

qini ukladá hodnoty do premenných čo narozdiel od dini vždy cyklujl... preto tá rýchlosť...

 


stock  dini_Set(filename[],key[],value[]) {
new File:fohnd, File:fwhnd;
new bool:wasset=false;
new tmpres[MAX_STRING];
if (key[0]==0) return false; /* If we have no sign in key, it can't be set*/
format(tmpres,sizeof(tmpres),"%s.part",filename);
fohnd=fopen(filename,io_read);
if (!fohnd) return false;
fremove(tmpres);
fwhnd=fopen(tmpres,io_write);
//  if (!fwhnd) return false;
while (fread(fohnd,tmpres)) {
	StripNewLine(tmpres);
	if ((!wasset)&&(equal(dini_PRIVATE_ExtractKey(tmpres),key,true))) {
		/* We've got what needs to be replaced! */
		format(tmpres,sizeof(tmpres),"%s=%s",key,value);
		wasset=true;
	}
	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 (fcopytextfile(tmpres,filename)) {
	return fremove(tmpres);
}
return false;
}

 

Vždy keď použieš dini_Set tak sa prečítajú všeky riadky, zmaže súbor, vytvorí nový a zapíše... a ak máš pod sebou 10x použité

dini_Set(filename[],key[],value[]);

tak 10x zmaže a a vytvorí súbor + prečíta všetky riadky a zapíše do nového... a tu je

qini

stock qini_Set(key[],value[]){
new qline = -1;
new bool:findet = false;
while((qline < qLines) && (qline < MAX_LINE)){
qline++;
    if(!qKey[qline][0]) continue;
	if(strcmp(key,qKey[qline],false) == 0){
		format(qValue[qline],MAX_VALUE,value);
//			printf("%s | %s | %s | %d | %d",qValue[qline],key,qKey[qline],qline,qLines);
		findet = true;
		break;
	}
}
if(!findet){
qLines++;
format(qKey[qLines],MAX_KEY,key);
format(qValue[qLines],MAX_VALUE,value);
//	printf("!!!!!!!!!!!!!!!!!!!!!!!!!%s=%s!!!!!!!!!!!!!!!!!!!!!!!!!!",qKey[qLines],qValue[qLines]);
}
}

 

tu uloží do premenej...

omfg....

 

---- EDIT ----

 

A pozrime si qini_Get & dini_Get

 

stock  dini_Get(filename[],key[]) {
new File:fohnd;
new tmpres[MAX_STRING];
new tmpres2[MAX_STRING];
tmpres[0]=0;
fohnd=fopen(filename,io_read);
if (!fohnd) return tmpres;
while (fread(fohnd,tmpres)) {
	StripNewLine(tmpres);
	if (equal(dini_PRIVATE_ExtractKey(tmpres),key,true)) {
		/* We've got what we need */
		tmpres2[0]=0;
		strcat(tmpres2,dini_PRIVATE_ExtractValue(tmpres));
		fclose(fohnd);
		return tmpres2;
	}
}
fclose(fohnd);
return tmpres;
}

Zase otvára súbor a cyklý

 

a qini



stock qini_Get(key[]){
new qline = -1;
while((qline < qLines) && (qline < MAX_LINE)){
qline++;
	if(!strcmp(key,qKey[qline],false)){
	return qValue[qline];
 		}
  }
  return qValue[0];
}

 

vidíš ten rozdiel ?

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...