[Plugin] [REL]tfile 3.0 Best file system!
#1

I present you, my new plugin named tfile 3.0, is based on C++ fstream and it's better than standard file.inc (more characters available)

Why it is better then others file systems?
Almost all to set one value to file must use one function, in my plugin you use one function to save or get unlimited number of data

Functions:

fGetData(const file[], const format[], {Float,_}:...)
Get the data from the file
  • const file[] - name of a file
  • const format[] - list of keys and value types to get from file, see below*
  • {Float,_}:... - arguments to save data from file
Return numbers of getting values from file


fSaveData(const file[], const format[], {Float,_}:...)
Saves data to the file
  • const file[] - name of a file
  • const format[] - the same as fGetData*
  • {Float,_}:... - arguments (values) to save in the file
Returns true if all is correct


fAddData(const file[], const string[], bool:exist = false)
Add data to the file
  • const file[] - name of a file
  • const string[] - text to save in file
  • bool:exist = false - file must exist, default no
Returns true if all is correct


fDeleteData(const file[], const key[])
Deletes the data from the file
  • const file[] - file name
  • const key[] - key or list of keys separated by ,
Returns true if all is correct


fKeyExist(const file[], const key[])
Check if key or keys (max 32) exist in file
  • const file[] - file name
  • const key[] - key or list of keys separated by ,
For one key returns true/false, for more returns number that represented by bits which one key exist or not


fCreate(const file[], const string[])
Creates a file and saves something to him
  • const file[] - file name
  • const string[] - text to save in file
Returns true if all is correct

Additional functions

fConvertTags(const file[], oldtag, newtag)
Convert diverting char
  • const file[] - file name
  • oldtag - old diverting char, for example '='
  • newtag - new diverting char, for example '-'
Returns true if all is correct


fChangeConfig(keytab = '=', nicelook = false, ignorekeycase = false, keysize = 30, linesize = 256)
  • keytab = '=' - diverting char
  • nicelook = false - if true file looks "key = value" is false "key=value"
  • ignorekeycase = false - whether to ignore case when searching for a key in a file
  • keysize = 30 - max length of key name
  • linesize = 256 - max size of one line in file
Returns true if all is correct



*What is the format? i explain the example
pawn Code:
new pass[24], Float:hp, sex = 'F';
GetPlayerHealth(playerid, hp);
fSaveData("test.txt", "Money<d>Pass<s>HP<f>sex<c>", GetPlayerMoney(playerid), pass, hp, sex);
and in file we find:
Quote:

Money=10000
Pass=mama
HP=100.0
sex=F

and the same to get:
pawn Code:
new money, pass[24], Float:hp, sex;
fGetData("test.txt", "Money<d>Pass<s>HP<f>sex<c>", money, pass, hp, sex);
SetPlayerMoney(playerid, money);
SetPlayerHealth(playerid, hp);
<i> or <d> - number
<s> - string, text
<f> - float value
<c> - one char

pawn Code:
new x = fKeyExist("test.txt", "Money,Score,sex,Money");
if(x & 1) // if Money exist
    print("Money exist");

if(x & 2) // if Score exist
    print("Score exist");

if(x & 4) // if sex exist
    print("sex exist");

if(x & 8) // if Money exist
    print("Money exist");
pawn Code:
fDeleteData("test.txt", "Money,sex");
after that file looks:
Quote:

Pass=mama
HP=100.0

pawn Code:
new str[64];
format(str, sizeof str, "Money=%d\nScore=%d\nVIP=1\n", GetPlayerMoney(playerid), GetPlayerScore(playerid));
fAddData("test.txt", str);
Download:
tfile3.inc; Mirror
tfile.dll; Mirror
tfile.so; Mirror

Source Code; Mirror
Reply
#2

Nice ! I want to see some speed test results.
EDIT: hehe, first post
Reply
#3

Looks nice, gonna test it.
Reply
#4

Looks a nice one, can you do some tests please. I'm so curious.
Reply
#5

Nice job.
Reply
#6

I'm waiting for a response of ******, to be sure
Reply
#7

Quote:
Originally Posted by Vukilore
View Post
I'm waiting for a response of ******, to be sure
Everybody loves professionals


Quote:
Originally Posted by TheArcher
View Post
Looks a nice one, can you do some tests please. I'm so curious.
Tests?
Reply
#8

Awesome! Waiting for speed results comparing this with y_ini.
Reply
#9

Quote:
Originally Posted by rVar
Посмотреть сообщение
Awesome! Waiting for speed results comparing this with y_ini.
It's hard to tell, in y_ini you uses one function to set one value to file, it's easy to test the speed, you just make big loop and count the time for example 10000 runs of function, then just divide time by 10000

Here you have one function and you can write big number of arguments but more time will take loop for all arguments in function then others things, and you will never set/get so many arguments to/from file, so if you divide by numbers of arguments you get more time for checking arguments, searching then, than normally run time of function
Reply
#10

Quote:
Originally Posted by Terminator3
View Post
Tests?
Quote:
Originally Posted by rVar
View Post
Waiting for speed results comparing this with y_ini.
4 char
Reply
#11

When trying to use this plugin I always get this:
Code:
Run time error 19: "File or function is not found"
I even tried something simple and small in a bare gamemode:
pawn Code:
fCreate("test.txt", "Testing");
And it still gives me the error, I've tried both on Windows and Linux. I have tfile3 included, the plugin is in the plugins folder and "tfile" is in the plugins line in server.cfg

Am I missing something?
Reply
#12

I'll do a few tests myself in an hour and post the results here.
Reply
#13

Quote:
Originally Posted by Prumpuz
View Post
When trying to use this plugin I always get this:
Code:
Run time error 19: "File or function is not found"
I even tried something simple and small in a bare gamemode:
pawn Code:
fCreate("test.txt", "Testing");
And it still gives me the error, I've tried both on Windows and Linux. I have tfile3 included, the plugin is in the plugins folder and "tfile" is in the plugins line in server.cfg

Am I missing something?
Any error in server_log.txt with loading plugin ?
Reply
#14

Quote:
Originally Posted by ******
Посмотреть сообщение
Will it read the data? Will it detect that every key exists? Will it overwrite correctly? I've not tested this so I don't know.
Yes, order does not matter.

Quote:
Originally Posted by ******
Посмотреть сообщение
Finally, the name is misleading - this isn't a FILE plugin, it's an INI plugin. Files can contain many different types of data in many different formats, this will only handle one of those types. Speaking of which, how does it handle INI sections and comments, something most of the INI parsers here don't deal with well?
Sorry, i always used the name 'file system' because in SA: MP rather, no one uses files for other things as storing data in this way. But i can always change the name of 'topic'

Quote:
Originally Posted by ******
Посмотреть сообщение
There are so many mistakes in that code it's not even funny - and the compiler will catch NONE of them. In other systems:
Similar like in sscanf


I was thinking about doing a function to open and close the file, but ultimately I made the argument file name because even if I make this function the fGet/SaveData will still read whole file line by line
Reply
#15

Quote:
Originally Posted by ******
Посмотреть сообщение
Touchй!
Though, you were comparing the file system to other file systems, not to sscanf (since they obviously have nothing in common).
Reply
#16

Looks intersting...
will test it out.
Can you provide test results ?
Reply
#17

oh great , a ini system based on plugin , really rox
Reply
#18

Nice release.

Good work.
Reply
#19

Big update of optimality and improvement of several errors
Reply
#20

If the server shutdown it not save the data
Reply


Forum Jump:


Users browsing this thread: 11 Guest(s)