Pisti|Mari|Jani
Sscanf az nem fájlkezelõ! Általában feldarabolásra szokták használni,pl.:BlueG:MySQL plugin R6,ott,ha ki választasz pár dolgot,akkor így kapod meg az értéket: Pisti|Mari|Jani és ezt szokták feldarabolni a | jel mentén!
Sscanf az nem fájlkezelõ! Általában feldarabolásra szokták használni,pl.:BlueG:MySQL plugin R6,ott,ha ki választasz pár dolgot,akkor így kapod meg az értéket: Pisti|Mari|Jani és ezt szokták feldarabolni a | jel mentén! Egy példát tudnál esetleg írni rá? Mert nemnagyon vágom [/quote]Kezdjük ott, hogy te most mit akarsz? Fájlkezelõ rendszer kell, mert sscanfal nem tudsz fájlba írni és olvasni max feldarabolod!Fájlkezelõ rendszerek kezdõknek:Dini
Sscanf az nem fájlkezelõ! Általában feldarabolásra szokták használni,pl.:BlueG:MySQL plugin R6,ott,ha ki választasz pár dolgot,akkor így kapod meg az értéket: Pisti|Mari|Jani és ezt szokták feldarabolni a | jel mentén! Egy példát tudnál esetleg írni rá? Mert nemnagyon vágom [/quote]Kezdjük ott, hogy te most mit akarsz? Fájlkezelõ rendszer kell, mert sscanfal nem tudsz fájlba írni és olvasni max feldarabolod!Fájlkezelõ rendszerek kezdõknek:Dini [/quote]Úgylátszik nemtudom, hogy mit is akarok Akkor erre a feldarabolásra esetleg egy pédát valaki? De lehetõleg ne mysql-es legyen . . .
//------------------------------------------------------------------------------// Név: sscanf példaszkript, magyarázatokkal// Készítõ: GameStar// sscanf plugin, eredeti dokumentáció: Y_Less (a példák Y_Less dokumentációjára épülnek!)// Web: gtaforum.hu, y-less.com// Frissítve: 2012. május 20.//------------------------------------------------------------------------------#include <a_samp>// Az sscanf funkció beágyazása ebbe a szkriptbe#include <sscanf2>// Ha egy példa nem kell, akkor tegyél az alábbi sorokban \"//\"-t elé. (kommenteld)// Ha pedig kell, akkor töröld ki elõle.#define EXAMPLE1#define EXAMPLE2#define EXAMPLE3#define EXAMPLE4#define EXAMPLE5#define EXAMPLE6#define EXAMPLE7#define EXAMPLE8//#define EXAMPLE9// A példák a szkript indulásakor futnak le. Ha elindítod a szkriptet, akkor// ellenõrizheted a leírtakat.public OnFilterScriptInit(){ #if defined EXAMPLE1// 1. PÉLDA: Az alap // Meg kell adni egy bemenetet, egy formátumot, és céltárolókat, amikbe az // értékeket szeretnéd menteni a bemenetbõl a formátum alapján. new EXAMPLE1_var0[32], EXAMPLE1_var1; // Az alábbi kód lefutásával az EXAMPLE1_var0 értéke \"üdv\", az EXAMPLE1_var1 értéke // pedig 10 lesz. A formátum egy 32 cellás karakterlánc és egy egész szám. sscanf(\"üdv 10\", \"s[32]i\", EXAMPLE1_var0, EXAMPLE1_var1); printf(\"EXAMPLE1_var0: %s\\nEXAMPLE1_var1: %i\", EXAMPLE1_var0, EXAMPLE1_var1); #endif #if defined EXAMPLE2// 2. PÉLDA: Tömbök // A függvény lehetõvé teszi, hogy egy tömbbe mentsük bele az értékeket. new EXAMPLE2_array0[5]; // Az alábbi kód lefutásával az EXAMPLE2_array0 minden indexbe sorra felveszi // az értékeket sscanf(\"1 2 3 4 5\", \"a<i>[5]\", EXAMPLE2_array0); for(new i = 0; i < sizeof(EXAMPLE2_array0); i++) printf(\"EXAMPLE2_array0[%i]: %i\", i, EXAMPLE2_array0); #endif #if defined EXAMPLE3// 3. PÉLDA: Enum enum EXAMPLE3_enum0 { e_integer, Float:e_float, e_string[32], e_character } new EXAMPLE3_var0[EXAMPLE3_enum0]; // Az alábbi kód lefutásával az EXAMPLE3_var0 minden indexe felvesz egy értéket // a megadott formátum alapján sscanf(\"1 12.0 Bob c\", \"e<ifs[32]c>\", EXAMPLE3_var0); printf(\"EXAMPLE3_var0[e_integer]: %i\", EXAMPLE3_var0[e_integer]); printf(\"EXAMPLE3_var0[e_float]: %f\", EXAMPLE3_var0[e_float]); printf(\"EXAMPLE3_var0[e_string]: %s\", EXAMPLE3_var0[e_string]); printf(\"EXAMPLE3_var0[e_character]: %c\", EXAMPLE3_var0[e_character]); #endif #if defined EXAMPLE4// 4. PÉLDA: Az úgynevezett \"csendes szekció\" // Amelyik formátumszakaszt {} közé rakjuk, azt a függvény késõbb érzékeli, // de nem veszi figyelembe. new EXAMPLE4_var0, EXAMPLE4_var1; // Az alábbi kód lefutásával az EXAMPLE3_var0 értéke -100 lesz, mert az elsõ egész // számot (42) nem vesszük figyelembe. sscanf(\"42 -100\", \"{i}i\", EXAMPLE4_var0); printf(\"EXAMPLE4_var0: %i\", EXAMPLE4_var0); // Az alábbi kód lefutásával az EXAMPLE3_var1 értéke 42 lesz, mert a második egész // számot (-100) nem vesszük figyelembe. sscanf(\"42 -100\", \"i{i}\", EXAMPLE4_var1); printf(\"EXAMPLE4_var1: %i\", EXAMPLE4_var1); #endif #if defined EXAMPLE5// 5. PÉLDA: Szöveg keresése // \'\' közé rakva kereshetõ egy szöveg. Ilyenkor a függvény a szöveg pozíciójára // ugrik, ezért a korábbi és az új pozíció közötti dolgokat nem fogja figyelembe // venni. Az alábbi példa is szemlélteti ezt. // Formátumként megadunk egy egész számot (ami az elsõ egész szám - 10), amit a // függvény be is olvas. Majd megkerestetjük vele a szövegben a \"szöveg\" részt, // és végül lekérjük az utolsó egész számot (ami a 12). A 11 kimarad, mert a keresés // elõtt még nem lett figyelembe véve, utána pedig a függvény nem is törõdött vele, // mert a keresés miatt átugrott azon a részen. new EXAMPLE5_var0, EXAMPLE5_var1; sscanf(\"10 11 szöveg 12\", \"i\'szöveg\'i\", EXAMPLE5_var0, EXAMPLE5_var1); printf(\"EXAMPLE5_var0: %i\\nEXAMPLE5_var1: %i\", EXAMPLE5_var0, EXAMPLE5_var1); #endif #if defined EXAMPLE6// 6. PÉLDA: Az elválasztók // Ha a bemeneti szövegekben az értékeket valami elválasztja (mondjuk vesszõ), akkor // megadhatjuk a függvénynek, hogy azok mentén válassza szét az értékeket. // A formátuma p<elválasztó>, tehát vesszõnél p<,> new EXAMPLE6_var0, EXAMPLE6_var1[12], EXAMPLE6_var2; sscanf(\"1,nem,3\", \"p<,>is[12]i\", EXAMPLE6_var0, EXAMPLE6_var1, EXAMPLE6_var2); printf(\"EXAMPLE6_var0: %i\\nEXAMPLE6_var1: %s\\nEXAMPLE6_var2: %i\", EXAMPLE6_var0, EXAMPLE6_var1, EXAMPLE6_var2); #endif #if defined EXAMPLE7// 7. PÉLDA: Választható formátumok // Ugyanaz, mint a sima formátum, viszont ha a függvény nem talál neki értéket, // abban az esetben az általunk megadott \"alapértelmezett értéket\" adja neki. // Csak nagybetûvel kell írni, és meg kell adni az alapértelmezett értéket. new EXAMPLE7_var0, EXAMPLE7_var1[16], EXAMPLE7_var2[5]; // Itt nem adunk meg bemeneti szöveget, a választható egész szám alapértelmezett értékét // pedig 12-re állítjuk. A függvény nem fog találni értéket, így automatikusan 12-t fog // adni. sscanf(\"\", \"I(12)\", EXAMPLE7_var0); printf(\"EXAMPLE7_var0: %i\", EXAMPLE7_var0); // Karakterlánccal sscanf(\"\", \"S(alapértelmezett)[16]\", EXAMPLE7_var1); printf(\"EXAMPLE7_var1: %s\", EXAMPLE7_var1); // Tömbbel sscanf(\"\", \"A<i>(1, 2, 3, 4, 5)[5]\", EXAMPLE7_var2); for(new i = 0; i < sizeof(EXAMPLE7_var2); i++) printf(\"EXAMPLE7_var2[%i]: %i\", i, EXAMPLE7_var2); #endif #if defined EXAMPLE8// 8. PÉLDA: Egyéni formátumok // Lehetõségünk van saját formátumokat csinálni. Csak egy SSCANF: elõtag kell. // Ennek is van választható, és sima fajtája is. A választható esetében, ha nem tudja // meghívni a saját formátum eljárását, akkor az alapértelmezett értéket adja. new EXAMPLE8_var0[16], EXAMPLE8_var1, EXAMPLE8_var2[16], EXAMPLE8_var3; sscanf(\"GameStar PLAYER_STATE_PASSENGER\", \"s[16]k<playerstate>\", EXAMPLE8_var0, EXAMPLE8_var1); // Az EXAMPLE7_var1 értéke 3 kell, hogy legyen. printf(\"EXAMPLE8_var0: %s\\nEXAMPLE8_var1: %i\", EXAMPLE8_var0, EXAMPLE8_var1); // Ha a bemenetben nincs megadva az állapot szövegesen, akkor az alapértelmezett // értéket (PLAYER_STATE_PASSENGER) kapjuk sscanf(\"GameStar\", \"s[16]K<playerstate>(PLAYER_STATE_PASSENGER)\", EXAMPLE8_var2, EXAMPLE8_var3); // Az EXAMPLE8_var3 értéke 3 kell, hogy legyen. printf(\"EXAMPLE8_var2: %s\\nEXAMPLE8_var3: %i\", EXAMPLE8_var0, EXAMPLE8_var1); #endif #if defined EXAMPLE9// 9. PÉLDA: Összetettebb használat // A függvénnyel akár egész komplex formátumokat is csinálhatunk, íme egy példa: enum EXAMPLE9_enum0 { Float:e_float, // f e_string[32], // s[32] e_character, // c e_hex // h } new EXAMPLE9_var0[EXAMPLE9_enum0], EXAMPLE9_var1, Float:EXAMPLE9_var2[4]; // unformat-ot is írhatunk, az is elfogadott... unformat( \"üdv 22 nem PLAYER_STATE_DRIVER 20.0 gtaforum.hu g FF00DD\", \"{s[4]}\'nem\'k<playerstate>e<fs[32]ch>A<f>(1.434, 2.233, 3.262 ,4.176)[4]\", // A formátum szöveges magyarázata: // - Az elsõ szöveget (üdv) kihagyjuk a \"csendes szekcióval\". // - A 22-t is kihagyjuk, mert rákeresünk a következõ szövegre (nem). // Azzal sem törõdünk. // - A következõ szövegrõl (PLAYER_STATE_DRIVER) lekérdezzük a saját // formátumunkkal, hogy milyen érték tartozik hozzá. // - Ezután az enumba tartozó értékeket olvassuk ki: // - A lebegõpontos értéket (20.0) // - A karakterláncot (gtaforum.hu) // - A karaktert (g) // - A tizenhatos számrendszer beli számot (FF00DD) // - Választható tömbformátummal az alapértelmezett lebhegõpontos értékeket // fogjuk kapni, mivel nincs megadva a 4 lebegõpontos érték EXAMPLE9_var1, // k<playerstate> EXAMPLE9_var0, // e<fs[32]ch> EXAMPLE9_var2 // A<f>(1.434, 2.233, 3.262 ,4.176)[4] ); printf(\"EXAMPLE9_var1: %i\", EXAMPLE9_var1); printf(\"EXAMPLE9_var0[e_float]: %.1f\", EXAMPLE9_var0[e_float]); printf(\"EXAMPLE9_var0[e_string]: %s\", EXAMPLE9_var0[e_string]); printf(\"EXAMPLE9_var0[e_character]: %c\", EXAMPLE9_var0[e_character]); printf(\"EXAMPLE9_var0[e_hex]: %x\", EXAMPLE9_var0[e_hex]); for(new i = 0; i < sizeof(EXAMPLE9_var2); i++) printf(\"EXAMPLE9_var2[%i]: %.3f\", i, EXAMPLE9_var2); #endif return 1;}// (A 8. és 9. példához) egy egyéni formátum. Megadja szöveges adat alapján számmal, hogy a játékosnak// éppen mi az állapota.SSCANF:playerstate(string[]){ // Ha a szöveg már szám formátumú if (\'0\' <= string[0] <= \'9\') { // Lekérjük az értékét new ret = strval(string); // Ha a lekért érték 0, vagy kisebb vagy egyenlõ mint 9, akkor visszaadjuk if (0 <= ret <= 9) { return ret; } } else if (!strcmp(string, \"PLAYER_STATE_NONE\")) return 0; else if (!strcmp(string, \"PLAYER_STATE_ONFOOT\")) return 1; else if (!strcmp(string, \"PLAYER_STATE_DRIVER\")) return 2; else if (!strcmp(string, \"PLAYER_STATE_PASSENGER\")) return 3; else if (!strcmp(string, \"PLAYER_STATE_WASTED\")) return 7; else if (!strcmp(string, \"PLAYER_STATE_SPAWNED\")) return 8; else if (!strcmp(string, \"PLAYER_STATE_SPECTATING\")) return 9; // Ha nem találtunk a megadott szöveghez azonosítót, akkor -1-el tér vissza return -1;}
new query[87],line[50],adat[2];format(query, sizeof(query), \"SELECT `Pont`,`Penz` FROM `users` WHERE `Name` = \'%s\' LIMIT 1\", GetPlayerNameEx(playerid));//Kiválasztjuk a játékos pontjait és pénzét!mysql_query(query);mysql_store_result();mysql_fetch_row(line);//itt eltároljuk az értéket,ha pl 10 pont van az adatbázisban és $1000 akkor így néz ki,amit beleírtál a változóba: 10|1000mysql_free_result();sscanf(line, \"p<|>ii\",adat[0],adat[1]);//Most jöjjön a feldarabolás:Megadjuk neki a változót,amibe el van tárolva a string,majd a 2db kész intigert eltároljuk az adat[0],adat[1] változóban!
new query[87],line[50],adat[2];format(query, sizeof(query), \"SELECT `Pont`,`Penz` FROM `users` WHERE `Name` = \'%s\' LIMIT 1\", GetPlayerNameEx(playerid));//Kiválasztjuk a játékos pontjait és pénzét!mysql_query(query);mysql_store_result();mysql_fetch_row(line);//itt eltároljuk az értéket,ha pl 10 pont van az adatbázisban és $1000 akkor így néz ki,amit beleírtál a változóba: 10|1000mysql_free_result();sscanf(line, \"p<|>ii\",adat[0],adat[1]);//Most jöjjön a feldarabolás:Megadjuk neki a változót,amibe el van tárolva a string,majd a 2db kész intigert eltároljuk az adat[0],adat[1] változóban! Magyarázat:p<|> = Melyik karakternél legyen a feldarabolás,ez esetben: |i = intiger(szám)
Sscanf az nem fájlkezelõ! Általában feldarabolásra szokták használni,pl.:BlueG:MySQL plugin R6,ott,ha ki választasz pár dolgot,akkor így kapod meg az értéket: Pisti|Mari|Jani és ezt szokták feldarabolni a | jel mentén! Egy példát tudnál esetleg írni rá? Mert nemnagyon vágom [/quote]Ennél a hozzászólásnál még nem írta,mert én amikor megláttam ezt,akkor írtam a példámat!
Sscanf az nem fájlkezelõ! Általában feldarabolásra szokták használni,pl.:BlueG:MySQL plugin R6,ott,ha ki választasz pár dolgot,akkor így kapod meg az értéket: Pisti|Mari|Jani és ezt szokták feldarabolni a | jel mentén! Egy példát tudnál esetleg írni rá? Mert nemnagyon vágom [/quote]Ennél a hozzászólásnál még nem írta,mert én amikor megláttam ezt,akkor írtam a példámat! [/quote]oké, bocs én nem figyeltem.
fwrite(\"filename\", \"változóneve=változóértéke\");
new line[128];while(fread(\"filename\", line)) { if(sscanf(line, \"p<=>ss\", változóneve, változóértéke)) continue; //ha nem egyezik, továbbmegy a következõ sorra //változóértéket írhatod arra, amit szeretnél visszakapni, tehát szám, illetve lebegõpontos is lehet. ha pedig egyezik, akkor megkapod a két értéket}