Įvadas
Sveiki, ši biblioteka leis jums lengvai saugoti bei krauti duomenis iš/į tekstinius failus. Žinoma kyla klausimas, kam to reikia, jau yra dini, y_ini bei milijonas SQL duomenų saugojimo būdų?
- Dini - senas ir lėtas
- Y_Ini - Lietuvos bendruomenei atrodo sudėtingas
- SQL - Reikalauja papildomų programų, gali atrodyti sudėtingas
Paminėjau kad dini yra lėtas, galite atlikti savo testus, bet štai mano rezultatai vykdant elementarų krovimą ir saugojimą 5 kartus:
Bini užtruko 49 MS
Dini užtruko 1786 MS
Kaip naudoti bini
Krovimas
Pirmiausia reikia atidaryti pasirinktą failą:
bini_Load("duomenys.ini");
Ir viskas, galite krauti duomenis naudodami ini_*Get funkcijas:
new vardas[ MAX_PLAYER_NAME ];
bini_Get("duomenys.ini", "vardas", vardas, sizeof(vardas));
new skaicius = bini_IntGet("duomenys.ini", "skaicius");
new Float:gyvybes = bini_FloatGet("duomenys.ini", "gyvybes");
new bool:admin = bini_BoolGet("duomenys.ini", "adminas");
Svarbu! Nepamirškite uždaryti failo:
bini_Save("duomenys.ini");
Saugojimas
Kaip ir kraunant pirmiausia reikia atidaryti failą:
bini_Load("duomenys.ini");
Galime pradėti saugoti duomenis:
bini_Set("duomenys.ini", "vardas", "Bebras");
bini_IntSet("duomenys.ini", "skaicius", 65468);
bini_FloatSet("duomenys.ini", "gyvybes", 100.5);
bini_BoolSet("duomenys.ini", "adminas", false);
Svarbu! Nepamirškite uždaryti failo:
bini_Save("duomenys.ini");
Trynimas
Atidarom failą:
bini_Load("duomenys.ini");
Ištriname kažką:
bini_Remove("duomenys.ini", "vardas");
Ir vėl uždarom failą:
bini_Save("duomenys.ini");
Sakai kad bini greitesnis 36 kartus nei dini... kodėl? (teorija)
Labai skiriasi bini ir dini veikimo principai.
Ką daro dini? Kas kartą panaudojus vieną iš dini funkcijų skaitomas failas. T.y. kas kartą jis atidaromas, perskaitomas/kažkas įrašoma ir vėl uždaroma. Apskritai skaitymas iš nuolatinės atminties(HDD/SDD) yra lėtas. Jeigu norite gauti 100 reikšmių, failas bus perskaitytas 100 kartų! Ar nebūtų paprasčiau tai daryti vieną kartą?
Tuo tarpu bini panaudojus bini_Open paima visą failą ir pasideda jį į RAM(į kintamuosius). Tai reiškia kad kai pavyzdžiui panaudojate bini_IntSet, jūs įrašote ne į failą, o į atmintį... Į failą įrašo bini_Save. Ji paima visas pateiktas reikšmes ir įrašo į failą. Tai reiškia kad nesvarbu kiek tarp atidarymo ir uždarymo kartų keisite duomenis, failas vistiek bus perskaitytas tik vieną
kartą.
Parsisiuntimas
Funkis prieš 9 metus
Aš niekad nesugalvodavau būdo, net nebandžiau, kad nereiktų su MySQL kankintis. Bet kaip išsaugot į vieną failą, kaip mysql naujas eilutes daryt, taip faile pvz.: 1. date / actions text or smth / more 2. date / actions text or smth / more // ir taip toliau.
Yiin prieš 9 metus
Kaip ir kraunant pirmiausia reikia atidaryti failą:
bini_Load("duomenys.ini");
Galime pradėti saugoti duomenis:
bini_Set("duomenys.txt", "vardas", "Bebras");
bini_IntSet("duomenys.txt", "skaicius", 65468);
bini_FloatSet("duomenys.txt", "gyvybes", 100.5);
bini_BoolSet("duomenys.txt", "adminas", false);
kodėl pakrauni .ini failą, o saugai duomenis į .txt?
Yiin prieš 9 metus
stock bini_Save(const filename[])
{
bini_debug("bini_Save(%s) called", filename);
new fileindex,
File:handle;
// Jeu nurodė neegzistuojantį failą.
if(fileindex == BINI_INVALID_FILE_ID)
{
o kaip šitą suprast? :D
Yiin prieš 9 metus
Kodėl kiekvieną kartą kviečiant funkciją, darai
new fileindex = bini_GetFileIndex(filename);
Ne paprasčiau būtų jeigu bini_Load funkciją grąžintų tą indeksą, ir vietoj pasikartojančio failo pavadinimo užtektų perduoti tą indeksą?
e.g.
new file = bini_Load("failas.ini");
bini_IntSet(file, "value", 42);
bini_Save(file);