SA-MP Forums Archive
Getting a line out of a file - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: SA-MP Scripting and Plugins (https://sampforum.blast.hk/forumdisplay.php?fid=8)
+--- Forum: Scripting Help (https://sampforum.blast.hk/forumdisplay.php?fid=12)
+--- Thread: Getting a line out of a file (/showthread.php?tid=279943)



Getting a line out of a file - Wesley221 - 29.08.2011

Hey guys,

Lets say i got those lines in a file: (theyre all names, and can be added by a command)
Код:
Henk 
Piet
Klaas
Isabel
Wesley
And if i want to get the name "Klaas" out of this file, and remove it, how would i do this?
Dont really know how to explain this, but tell me if you want more information.
~Wesley


Re: Getting a line out of a file - Kingunit - 29.08.2011

You better save them in a file and then you can delete them out of the file.


Re: Getting a line out of a file - Wesley221 - 29.08.2011

This was an example, and the names i posted there were in the example file. Im trying to remove one of the lines (in my example this will be klaas), by using a command.


Re: Getting a line out of a file - IceCube! - 29.08.2011

So wait what are you loading it to a dialog?

Also the easyist way would to be to save names as

a = Henk
b = Piet

With Y_INI or somthing and hen loading it to somthing like you would do with a user

Dont really know what your loading it, explain further along these lines


Re: Getting a line out of a file - Wesley221 - 29.08.2011

Well practicly i got nothing now. Let me try to explain it, using a file as the banned list (example)

Im gonna make a folder in my scriptfiles, with a file inside it named "Banned.ini"(or anything else).
When i do /aban klaas, then it kicks the player klaas out of the game, and add his name to the Banned.ini. Then im gonna use /aban on piet, henk, isable & wesley. Now theyre all in the Banned.ini.
Now i want to remove them with a command, not by removing the name out of the file. So i wanna do /removeban klaas, so klaas will be removed from the banned.ini file, so he can enter the game again.

Hope i explained it well, and you understand what im trying to do.
~Wesley


Re: Getting a line out of a file - Joe Staff - 29.08.2011

Under the scenario of using this method for a banned library, it's OK. However; this isn't normally the method I would suggest to remove a name out of a library.

I would suggest SQLite, SQL and SQLite are kind of designed for this sort of use, here's some code for checking a table for banned users and the tables creation:

*code untested
pawn Код:
new DB:DB;
new DBResult:DBResult;

stock VerifyDatabase()
{
    new bool:remake;
   
    //Verify to see if the database exists
    if(!fexist("BannedDB"))remake=true;
    DB=db_open("BannedDB");
   
    //If database does not exist, create the necessary table
    if(remake)
    {
        print("[Database] Creating database...");
        db_free_result(db_query(DB,"CREATE IF NOT EXISTS `Banned` (`ID` INTEGER PRIMARY KEY, `Name` TEXT)"));
    }
   
    print("[Database] Database opened");
}

stock IsPlayerBanned(playerid)
{
    new tmpstring[64];
    new name[24];
    GetPlayerName(playerid,name,24);

    format(tmpstring,64,"SELECT ROWID FROM Banned WHERE Name='%s'",name);
    DBResult=db_query(DB,tmpstring);

    if(db_num_rows(DBResult))
    {
        db_free_result(DBResult);
        return 1;
    }
    return 0;
}

stock DBBan(playerid)
{
    new name[24];
    GetPlayerName(playerid,name,24);

    if(IsPlayerBanned(playerid))
    {
        printf("[Database] \"%s\" already found in banned database",name);
        return 0;
    }
   
    //Add name into database
    new tmpstring[64];
    format(tmpstring,64,"INSERT INTO Banned (Name) VALUES ('%s')",name);
    db_free_result(db_query(DB,tmpstring));
    printf("[Database] \"%s\" added to banned database",name);
    return 1;
}

stock UnbanName(const name[])
{
    new tmpstring[64];

    format(tmpstring,64,"DELETE FROM Banned WHERE Name='%s'",name);
    db_free_result(db_query(DB,tmpstring));
   
    return 1;
}
VerifyDatabase() would go into OnGameModeInit()
IsPlayerBanned will tell you if the player is banned (OnPlayerConnect is a good place for this)
DBBan(playerid) to ban players
UnbanName("name") to unban

Pretty simple


Re: Getting a line out of a file - Wesley221 - 29.08.2011

Hm thanks, but i dont use SQlite or anything like that.
I might consider using SQlite, or MySQL, but im not sure if i want that.
Another question
Is it possible to have a register system in y_ini, and some other features for SQLite/MySQL? Probably it is, but if its posible, is it fast, or should i convert the register system to SQLite/MySQL aswell then?


Re: Getting a line out of a file - Kingunit - 29.08.2011

It's better to have everything in one writer / reader. But it's still possible to do it


Re: Getting a line out of a file - Wesley221 - 29.08.2011

But is it faster to have everything in MySQL/SQLite, or just the register system in y_ini, and the ban thing in MySQL/SQLite?


Re: Getting a line out of a file - Joe Staff - 29.08.2011

Well technically speaking, files are the fastest method. But the difference between saving an account's information via SQLite or files is literally within 1 or 2 milliseconds, not noticeable to anyone. However; SQLite is far more organized, you can keep all information including bans, accounts, and server information in a single organized-file. So in the event you need to change servers or create backups, it will be no different than downloading and uploading a file probably no more than 10MB in size.

For a valid example of SQLite account system, take a look at my Assassin's Escape gamemode I publicly released a long time ago.