Jump to content

script mIni - rychlý a jednoduchý filesystém


Mort

Recommended Posts

Je to jednoduchý ini systém, který je jednoduchý na použití a poměrně rychlý, protože data čte a zapisuje pouze jednou.

Includ obsahuje následující fce:

 

FileOpen(path[])

Otevře soubor

path[] - cesta k souboru

return: -1, pokud je již využíváno maximum souboru naráz, jinak vrací n číslo, se kterým se pracuje dál

 

FileWriteString(index, key[], value[])

Zapíše textový řetězec př. Heslo=pawno.cz

index - je to číslo, které dostaneme, když otevřeme soubor pomocí FileOpen

key[] - je to jedinečný klíč, který se používá k zapisování dat např. "Heslo"

value[]  - hodnota klíče např. "pawno.cz"

 

FileWriteInteger(index, key[], value)

Zapíše číslo př. Penize=420

index - je to číslo, které dostaneme, když otevřeme soubor pomocí FileOpen

key[] - je to jedinečný klíč, který se používá k zapisování dat např. "Penize"

value  - hodnota klíče např. 420

 

FileWriteFloat(index, key[], float:value)

Zapíše desetinné číslo př. poziceX=420.420

index - je to číslo, které dostaneme, když otevřeme soubor pomocí FileOpen

key[] - je to jedinečný klíč, který se používá k zapisování dat např. "poziceX"

float:value  - hodnota klíče např. 420.420

 

FileWriteBoolean(index, key[], bool:value)

Zapíše logickou hodnotu, základně je to nastaveno tak, že pokud je podmínka pravdivá,

tak se zapíše jako "ANO", pokud ne tak "NE"

př. VIP=ANO

index - je to číslo, které dostaneme, když otevřeme soubor pomocí FileOpen

key[] - je to jedinečný klíč, který se používá k zapisování dat např. "VIP"

bool:value  - hodnota klíče true/false

 

FileReadString(index, key[], val[])

Přečte textový řetězec a zapíše jej do val[]

index - je to číslo, které dostaneme, když otevřeme soubor pomocí FileOpen

key[] - klíč k hodnotě

val[]  - sem se hodnota daného klíče zapíše

 

FileReadInteger(index, key[], &val)

Získá hodnotu a zapíše jej do val

index - je to číslo, které dostaneme, když otevřeme soubor pomocí FileOpen

key[] - klíč k hodnotě

&val  - sem se hodnota daného klíče zapíše

 

FileReadFloat(index, key[], &Float:val)

Přečte desetinné číslo a zapíše jej do val

index - je to číslo, které dostaneme, když otevřeme soubor pomocí FileOpen

key[] - klíč k hodnotě

&Float:val  - sem se hodnota daného klíče zapíše

 

FileReadBoolean(index, key[], &bool:value)

Přečte textový řetězec a zapíše jej do val[]

index - je to číslo, které dostaneme, když otevřeme soubor pomocí FileOpen

key[] - klíč k hodnotě

&bool:value - sem se hodnota daného klíče zapíše

 

FileDelete(path[])

Smaže soubor

path[] - cesta k souboru

 

FileRemoveData(index, key[])

Smaže data pomocí klíče (smaže celý řádek)

index - číslo, které dostaneme pomocí FileOpen

key[] - klíč, který smaže

 

FileClose(index)

Zapíše všechny změny a uvolní paměť k dalšímu použití.

index - číslo, které dostaneme pomocí FileOpen

 

----------------------------------------------------------------------------------------------------------------

Příklad použití:

new soubor = FileOpen("ahoj.txt");
FileWriteString(soubor, "Pozdrav", "zdravim vsechny"); // zapíšeme string
FileWriteInteger(soubor, "Cislo", 420); // zapíšeme číslo
FileWriteFloat(soubor, "Cislo_Float", 666.6666); // zapíšeme float
FileWriteBoolean(soubor, "Opily", true); // zapíšeme bool
FileClose(soubor); // zapíšeme všechny data
// soubor bude nyní vypadat takto
/*
Pozdrav=zdravim vsechny
Cislo=420
Cislo_Float=666.6666
Opily=ANO
*/
// nyni ziskame data do promennych
new pozdrav[50], cislo, Float:cislo2, bool:opily;
soubor = FileOpen("ahoj.txt");
FileReadString(soubor, "Pozdrav", pozdrav); // v proměnné pozdrav nyní bude "zdravim vsechny"
FileReadInteger(soubor, "Cislo", cislo); // v proměnné cislo nyní bude 420
FileReadFloat(soubor, "Cislo_Float", cislo2); // v proměnné cislo2 nyní bude 666.6666
FileReadBoolean(soubor, "Opily", opily); // proměnná opily nyní bude true
// ještě zkusíme vymazat řádek
FileRemoveData(soubor, "Pozdrav");
// a uložíme
FileClose(soubor);
// takže nyní v souboru "ahoj.txt" bude:
/*
Cislo=420
Cislo_Float=666.6666
Opily=ANO
*/

------------------------------------------------------------------------------

Pokud soubor nemohl byt vytvoren tak se server vypne.

Přidal jsem i definy nahoře v includu, je u nich popisek co dělají takže si je raději přečtěte a kdyby něco nefungovalo, tak zvyšte hodnotu nebo mi napiště.

 

Zkoušel jsem přečíst a načíst 5000 hodnot ze souboru, vyšli mi takové hodnoty oproti dini:

[21:23:13] mIni zapis: 3463ms
[21:23:17] mIni cteni: 3502ms
[21:25:25] dini zapisovani: 128208ms
[21:26:12] dini cteni: 47059ms

Kdyby někdo chtěl tak se může dát hodnoty i oproti ostatním ini systémům, y_ini je rozhodně lepší ale já než bych se prodral nekonečnými warningy a errory  :eh:

Odkaz na stažení: http://pawno.cz/files/file/427-mini/

 

Jestli ho někdo použije tak budu rád  :d

Díkec,

Mort.

 

  • Líbí se mi to! (+1) 2
Link to comment
Share on other sites

Mohol by si dať kód, ktorým si testoval tú rýchlosť zápisu a čítania?

 

Testování rychlosti:

new start, end, help, str[5];
	fclose(fopen("test-files.ini", io_write));
	start = GetTickCount();
	new file = FileOpen("test-files.ini");
	for(new i = 0; i < 5000; i++)
	{
	    format(str, 5, "%d", i);
	    FileWriteInteger(file, str, i);
	}
	FileClose(file);
	end = GetTickCount();
	printf("mIni zapis: %dms", end - start);
	start = GetTickCount();
	file = FileOpen("test-files.ini");
	for(new i = 0; i < 5000; i++)
	{
	    format(str, 5, "%d", i);
	    FileReadInteger(file, str, help);
	}
	FileClose(file);
	end = GetTickCount();
	printf("mIni cteni: %dms", end - start);
	fremove("test-files.ini");
	fclose(fopen("test-files.ini", io_write));
	start = GetTickCount();
	for(new i = 0; i < 5000; i++)
	{
	    format(str, 5, "%d", i);
	    dini_IntSet("test-files.ini", str, i);
	}
	end = GetTickCount();
	printf("dini zapisovani: %dms", end - start);
	start = GetTickCount();
	for(new i = 0; i < 5000; i++)
	{
	    format(str, 5, "%d", i);
	    help = dini_Int("test-files.ini", str);
	}
	end = GetTickCount();
	printf("dini cteni: %dms", end - start);

Mohl bys to testout i oproti DOF2?

 

Já jsem to taky zkoušel testovat oproti DOF2, ale nevím jestli jsem něco špatně nastavil, ale nikdy se mi do souboru nic nenapsalo. Kdyby jsi měl čas tak to můžeš prubnout.

Link to comment
Share on other sites

  • Administrátor

Výsledky testu DOF2 podle mortova testu :

 

[12:40:47] DOF2 zapisovani: 99ms
[12:40:47] DOF2 cteni: 67ms
Edited by Ewwe
Link to comment
Share on other sites

  • Administrátor

To je způsobené tím že mini a dof přistupují k nalezení výsledku rozdílně.... mini si načte obsah souboru do bufferu a v tom pak hledá ale dof si do bufferu načte rovnou příslušný řádek... Je to hodně zjednodušené ale zhruba tak to je

 

Navíc copak mini to ještě jde ale podívej se na zápis u dini a u DOF :d To je teprve rozdíl...

Edited by Ewwe
Link to comment
Share on other sites

me se to teda taky nikdy nestalo
me se to teda taky nikdy nestalo
me se to teda taky nikdy nestalo
me se to teda taky nikdy nestalo
me se to teda taky nikdy nestalo
me se to teda taky nikdy nestalo

me se to teda taky nikdy nestalo. co ja vim. treba mas neco s prohlizecem. ;)

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