GTA Közösség - A magyar GTA fórum

San Andreas Multiplayer (SA-MP) => SA-MP: Szerverfejlesztés => Tanuljunk PAWN nyelvet => A témát indította: ZeRo - 2010. Április 15. - 18:40:26

Cím: [Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
Írta: ZeRo - 2010. Április 15. - 18:40:26
A sscanf függvény
 
Mi is ez?
A sscanf függvény segítségével karakterláncokat bonthatunk szét megadott egységek szerint. Hasonlít a strtok függvényre, de sokkal gyorsabb, egyszerûbb, és sokoldalúbb is.
Telepítés / üzembehozás
Elõször is töltsük le a plugint innen, majd a szervermappád/plugins mappába másold be a sscanf.dll-t. Ezután nyisd meg a server.cfg-t, és a plugins sorhoz add hozzá a sscanf-ot így:
 
plugins sscanf

 

plugins sscanf.so

 
Most helyezzük el a sscanf2.inc-t a szervermappánk/pawno/include mappában. Ezek után nyissuk meg a Pawno-t, és ágyazzuk be a fejállományt:
[pawn]#include < sscanf2 >[/pawn]
És már használhatjuk is a függvényt!
Megjegyzés: Ha a forrásodban a sscanf valamelyik régebbi verzióját használtad, akkor töröld ki, mivel a fordító nem fogja átfordítani a kódodat!
Mûködése
Mint már fentebb említettem, megadhatjuk, hogy az általunk kiválasztott sztringet milyen formátum( ok )ba darabolja szét. Ez sokkal egyszerûbb, mint amilyennek hangzik.  ;) Lássunk egy példát!
[pawn]
public OnFilterScriptInit(  ) {
    //Tárolók létrehozása
    new szStr[ 12 ];
    new iNum;
    //A karakterlánc szétválasztása, és a darabok elhelyezése a megfelelõ tárolókban
    sscanf( \"Sscanf 2\", \"s[12]i\", szStr, iNum );
    print( szStr );
    printf( \"%i\", iNum );
    return;
}
[/pawn]
Az alábbi eljárást lefuttatva ezt az eredményt kapjuk:
 

Sscanf
2

 
Fontos észrevennünk, hogy így a részek a megadott formátumba kerülnek át a sztring formátum helyett( kivétel ha sztring formátumba választjuk szét, akkor ugyanaz marad természetesen ).
Lehetséges elválasztók:
Jelölés                      NévPéldaérték
i, dInteger1, 42, -10
cKaraktera, o, *
sKarakterláncsztring, példa
lLogikaitrue, false
bBináris01001, 0b1100
h, xHexadecimális1A, 0x23
oOktális045 12
nSzám42, 0b010, 0xAC, 045
fLebegõpontos0.7, -99.5
gIEE lebegõpontos0.7, -99.5, INFINITY, -INFINITY, NAN, NAN_E
uFelhasználó név/id                      ZeRo, 1
qNPC név/idShopBot, 13
rJátékos név/idZeRo, 33
Az \'átmentés\' módszere:
Íme egy rossz példa:
[pawn]sscanf( \"ez sscanf 2\", s[12]i, string, integer );[/pawn]
Ugyanis a fenti példában a \'sscanf\' karakterlánc( sztring ) típusú, de az elválasztásban mi az i betût használtuk, ami egész számot( integert ) kellene jelöljön. Ezt kiküszöbölhetjük az átmentés módszerével, aminek a jele a \\\\( mivel a sima \\ a fordítóprogram által már használatban van ). Tehát, az elõzõ példánk helyesen így nézne ki:
[pawn]sscanf( \"ez\\\\ sscanf 2\", s[12]i, string, integer );[/pawn]
Ha a string, és az integer nevû változók létre lennének hozva, és lefuttatnánk a fenti kódot, akkor az eredményünk a következõ lenne:
 

ez sscanf //Ez a \'string\' karakterlánc értéke
2 //Ez az \'integer\' változó értéke

 
Enumerációs elválasztás:
A sscanf egyik elõnye( például a strtok-al szemben ), hogy lehetõségünk van az adatokat egybõl egy felsorolt adattípusba( Enum ) rendezni. Ennek az elválasztásnak a jelölése egy \'e\' betûvel kezdõdik, ami az enumerációs elválasztást jelöli, egy \'<\' jellel folytatódik, ami az enumerációs elválasztás kezdetét jelöli, majd az elválasztók után egy \'>\' jellel végzõdik, ami pedig a folyamat végét jelöli. Egy példa:
[pawn]
//Globális névtérben létrehozunk egy felsorolt adattípust
enum eTest {
    szString[ 32 ],
    Float: fFloat,
    iInteger
}
new eData[ eTest ];
//És valahol hivatkozunk rá, mégpedig egy sztringbõl bemásoljuk az adatokat a megfelelõ helyekre
sscanf( \"Unformat 3.141593 2010\", \"e<s[32]fi>\", eData );
[/pawn]
Ezzel feltöltöttük értékekkel az eData vektort. De például, ha rossz sorrendben hivatkozunk rá, akkor hibaüzenetet fogunk kapni.
[pawn]sscanf( \"2010 Unformat 3.141593\", \"e<s[32]fi>\", eData);[/pawn]
Mivel a 2010 nem karakterlánc, az \'Unformat\' nem lebegõpontos érték, és a 3.141593 pedig nem egész típusú szám.
Ez a kis funkciója a függvénynek hasznos lehet például nagyobb játékmódoknál, vagy játékos-adatokat kezelõ rendszereknél, vagy bárhol máshol, ahol felsorolt adattípussal dolgozunk.
A \'kihagyás\' módszere:
A kihagyás lényege az, hogy a megadott részt beolvassuk a sztringbõl( bármilyen formátumú is az ), és ellenõrizzük( tehát feltétellel ki lehet szûrni, ha rossz a bevitt érték ), de a különbség az a sima elválasztással szemben, hogy itt a kihagyott rész nem kerül mentésre, tehát nem kell megadnunk változót a visszatérési értéknek.
A jele a \'{\', illetve a \'}\' karakterek, ami egyértelmûen a kihagyás kezdetét, és végét jelölik. Az alábbi példában az elsõ értéket kezeljük a kihagyással:
[pawn]sscanf( \"6 47\", {i}i, integer );[/pawn]
Amint fent is említettem, két értéket, és két elválasztó karaktert láthatunk, de csak egy visszatérési változót, aminek oka - amint már leírtam - az, hogy a kihagyással kezelt érték nem kerül mentésre, tehát a kód folytatása során nem tudunk rá hivatkozni.
Így a fenti példában az \'integer\' nevû változónk értéke 47 lesz, a 6 pedig törlõdik( elvetõdik ). És amint azt az elején leírtam, a bevitt adatok ugyanúgy ellenõrzésre kerülnek, tehát a következõ kód hibát eredményezne:
[pawn]
new integer;
if( sscanf( \"kettõ 2\", {i}i, integer ) )
[/pawn]
Mivel a \'kettõ\' sztring típusú, de mi integer típusú elválasztót rendeltünk hozzá( ugyan kihagyás van, de ezt nem zárja ki ).
Ezt a módszert akárhányszor alkalmazhatjuk az elválasztásaink során, amikor csak szükségünk van rá. Ezenkívül az enumerációs elválasztásokba is beágyazhatjuk õket, nem lesz rá hatással.
[pawn]sscanf( \"7 3.14 kutya 42 INFINITY x\", \"e<ifs[12]{ig}c>\", enumData );[/pawn]
Karakteres elválasztások
A függvénnyel lehetõségünk van továbbá karakterek által elválasztott adatok szétválasztására is. Nézzünk egy egyszerû példát!
[pawn]sscanf( \"1,2,3\", \"p<,>iii\", num1, num2, num3 );[/pawn]
A fenti kódrészletben a sztringet a megadott karakter mentén( itt a , mentén ) elválasztottuk, és integer típusú változókba helyeztük. Alakja egyszerû: a p jelenti a karakteres elválasztást, a < az elválasztás kezdetét, a benne lévõ karakter( itt a VESSZÕ ) az elválasztási karaktert, a > pedig az elválasztás végét( szerkezete majdnem megegyezik az enumerációs elválasztáséval ).
Ez a módszer természetesen mûködik az enumerációs elválasztásban is, és ez az egyetlen eset, ahol két <> van egymásba ágyazva. Egy példa:
[pawn]
//Létrehozunk egy enumerációs egységet
enum e_Data {
    int,
    Float: ffloat,
    string[ 24 ]
}
//Valahol hivatkozunk rá, mondjuk egy parancsban
new e_Var[ e_Data ];
sscanf( \"12432 3.14,ZeRo\", \"e<ip<,>fs[24]>\", e_Var );
[/pawn]
Ha csak karakterláncokkal használjuk ezt a módszert, akkor a mûvelet viselkedése kicsit módosul, ugyanis a legtöbb elválasztó érzékeny a szóközre. Ez azt jelenti, hogy például ez mûködni fog, annak ellenére, hogy nincs benne \';\' karakter:
[pawn]sscanf( \"1 2 3\", \"p<;>iii\", var0, var1, var2 );[/pawn]
De ez nem minden esetben mûködik. Példa egy kivételre:
[pawn]sscanf( \"hello 1\", \"p<->s[32]i\", str, var );[/pawn]
Itt ugyanis a str változó értéke hello 1 lesz. És végül zárjunk egy helyes példával:
[pawn]sscanf( \"hello there>27\", \"p<>>s[32]i\", str, var );[/pawn]
Ez mûködni fog, és a következõ eredményt adja vissza:
 

hello there
27

 
Példa egy parancsban való használatra
Az alábbi parancsban megmutatom, hogy mennyivel egyszerûbb kezelni ezt az egészet a sscanf-al, mint mondjuk a strtok-al. Nézzünk egy /pm parancsot!
[pawn]
CMD:pm( playerid, params[  ] ) {
    //Tároló létrehozása az azonosítónak, és az üzenetnek
    new iPid;
    new szMsg[ 100 ];
    if( sscanf( params, \"is[100]\", iPid, szMsg ) ) {
        SendClientMessage( playerid, COLOR_RED, \"Használat: /pm < JátékosID > < Üzenet >\" );
    } else if( !IsPlayerConnected( iPid ) || IsPlayerNPC( iPid ) ) {
        SendClientMessage( playerid, COLOR_RED, \"Érvénytelen azonosító!\" );
    } else {
        new szStr[ 128 ];
        format( szStr, sizeof szStr, \"[ PM ]: %s( %i ): %s\", GetPlayerNameEx( playerid ), playerid, szMsg );
        SendClientMessage( iPid, COLOR_YELLOW, szStr );
    }
    return 1;
}
GetPlayerNameEx( playerid ) {
    new z[ MAX_PLAYER_NAME ];
    GetPlayerName( playerid, z, sizeof z );
    return z;
}
[/pawn]
Megjegyzés:
A függvényt lehetõségünk van unformat néven is használni. Ezt az alternatív megoldást azért hozta létre Y_Less, hogy elkerülje a félreértéseket ezzel, és a C nyelv beli sscanf függvénnyel kapcsolatban.




Utolsó frissítés: 2011/05/09
Cím: [Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
Írta: Vampesz - 2010. Április 15. - 18:59:28
Nagyon szépen köszönöm :shy: és végre értem :) már csak majd be is kell tanulni és gyakorolni-gyakorolni-gyakorolni-gyakorolni-gyakorolni-gyakorolni-gyakorolni :D
Cím: [Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
Írta: ZeRo - 2010. Április 15. - 19:18:16
Idézetet írta: Vampesz date=1271350768\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"1375\" data-ipsquote-contentclass=\"forums_Topic
Nagyon szépen köszönöm :shy: és végre értem :) már csak majd be is kell tanulni és gyakorolni-gyakorolni-gyakorolni-gyakorolni-gyakorolni-gyakorolni-gyakorolni :D
 
Örülök ha tényleg sikerült egy új módszert( jobb módszert ) mutatnom.  ;) Amint már írtam, még bovítve lesz ez a leírás, majd jelzem itt, hozzászólásban.
Cím: [Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
Írta: Csabesz - 2010. Április 15. - 19:25:14
Jó lett. Szépen leírtad.  ;)
Cím: [Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
Írta: Depi - 2010. Április 15. - 19:35:38
Szép munka barátom,grat,habár egy kis \"Tutoriált\" már nekem tartóttál ebbol + a zcmd-bol,de szép leírás grat  :)
Cím: [Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
Írta: ZeRo - 2010. Április 15. - 19:36:01
Kösz mindenkinek.  ;)
Cím: [Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
Írta: Gamestar - 2010. Április 16. - 16:10:50
A sscanf?
Az* sscanf szerintem...én az unformat néven használnám
Egyébként nem rossz
Cím: [Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
Írta: kurta999 - 2010. Április 17. - 10:14:53
Jó leírás grat! Már végre megfogom tanulni az ienek használatát. Ám majd vki írhatna is strtock al, hogy mivel nehezebb az xD
Cím: [Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
Írta: Vampesz - 2010. Április 17. - 10:22:39
Idézetet írta: kurta999 date=1271492093\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"1375\" data-ipsquote-contentclass=\"forums_Topic
Jó leírás grat! Már végre megfogom tanulni az ienek használatát. Ám majd vki írhatna is strtock al, hogy mivel nehezebb az xD
 
Az könnyebb szerintem de viszont eggyúttal lassabb is.
Cím: [Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
Írta: jana4 - 2010. Április 17. - 15:00:31
jó tut, grat! am az i (integer) mögé mér kell a [100] ?
Cím: [Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
Írta: ZeRo - 2010. Április 17. - 15:05:09
Idézetet írta: ScreaM date=1271509231\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"1375\" data-ipsquote-contentclass=\"forums_Topic
jó tut, grat! am az i (integer) mögé mér kell a [100] ?
 
Nem, egyedül a sztring típusú( s ) elválasztásoknál kell megadni a méretet.
Dicséreteket köszönöm.
Cím: [Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
Írta: Vampesz - 2010. Április 17. - 15:05:16
is[100]

 
integer és string[100]

ha erre gondoltál :)


E: ZeRo megelozött :) am ja végülis le lehet rövidíteni 1-2 dolgot :D
Cím: [Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
Írta: GroX - 2010. Április 18. - 15:30:42
Én eddig is ismertem, és valamennyire tudtam használni de ez segített kösz.
Ezt fogom használni innentol, de az admin scriptemet már nem írom át mert már sok parancsot írtam meg strtok-al.
Cím: [Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
Írta: ZeRo - 2010. Április 26. - 21:21:58
Enumerációs elválasztás hozzáadva( a példa fölött van ).
Cím: [Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
Írta: kurta999 - 2010. Augusztus 04. - 22:38:22
Tom, h régi tut. De azt is hozzáadhatnád, hogy, h kell Alapértemezett értéket megadni vminek. ( Mert szerintem az elég sokan nemtudják. )
Meg még az { } -jel használatát is. ( Kihagyás )
Cím: [Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
Írta: krisk - 2010. Augusztus 09. - 14:01:08
1-2 hónapja használom, és meg vagyok vele elégedve! A tutorial pedig lényegretörõ.
Cím: [Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
Írta: ZeRo - 2010. Október 05. - 15:37:09
Az átmentés, és a kihagyás módszereket hozzáadtam. Valamikor várható még frissítés, tudom, hogy az elõzõ már régen volt, de most kedvet kaptam hozzá, így megcsináltam. Akinek kérdése van, az nyugodtan tegye fel, nem számít topikbumpolásnak.
Cím: [Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
Írta: Delta - 2010. Október 05. - 18:09:56
Az a kérdésem, régebben volt velem ilyen, hogy létrehoztam egy \'/hp\' parancsot, meg egy \'/lecsuk\' parancsot. Eddig minden rendben, de amikor megpróbálok valakinek életpontot adni, akkor a \'lecsukás\' jön be. Ez miért van? [\'Használat: /lecsuk [iD]\']
Cím: [Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
Írta: ZeRo - 2010. Október 05. - 18:29:03
Ez nem lehet sscanf probléma, inkább helytelen visszatérés lehet az oka. Ha bemásolod a kódrészletet, akkor tudok segíteni.
Cím: [Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
Írta: sivi151 - 2010. Október 05. - 20:00:36
jó tut bár engem már chucknoris megtanitott erre viszont az elválasztokra volt szükségem köszike!!
Cím: [Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
Írta: jana4 - 2010. Október 05. - 20:46:31
Remek kiegészítés ZeRo, ha tudnálak karmázni, adtam volna egy + -t  :)
Cím: [Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
Írta: Depi - 2010. Október 06. - 13:20:13
Kapott tõlem.
Cím: [Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
Írta: ZeRo - 2010. Október 06. - 14:48:05
Kösz nektek. :angel:
Cím: [Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
Írta: krisk - 2010. Október 17. - 14:39:32
Még van egy módszer amit használni szoktak/szoktam, az pedig, ha a változó típusok valamilyen karakterrel el vannak választva. Pl:
 
asd|1.0|krisk|15

 
Ezt a következõképp tudjuk SSCANF-fal szétválasztani:
 

new str[]=\"asd|1.0|krisk|15\";
new string[4];
new Float:lebeg;
new nev[MAX_PLAYER_NAME];
new integer;
sscanf( str,\"p<|>sfui\",string,lebeg,nev,integer );

 
A két <> közti karakter az a karakter, amivel a típusokat elválasztottad.
Cím: [Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
Írta: ChuckNorris - 2010. Október 17. - 15:42:31
Idézetet írta: krisk date=1287319172\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"1375\" data-ipsquote-contentclass=\"forums_Topic
Még van egy módszer amit használni szoktak/szoktam, az pedig, ha a változó típusok valamilyen karakterrel el vannak választva. Pl:
 
asd|1.0|krisk|15

 
Ezt a következõképp tudjuk SSCANF-fal szétválasztani:
 

new str[]=\"asd|1.0|krisk|15\";
new string[4];
new Float:lebeg;
new nev[MAX_PLAYER_NAME];
new integer;
sscanf( str,\"p<|>sfui\",string,lebeg,nev,integer );

 
A két <> közti karakter az a karakter, amivel a típusokat elválasztottad.
 
Ezt én a MySql regisztrációnál beolvasásra használom,tényleg hasznos.
Különben nagyon jó a leírás ZeRo. :)
Cím: [Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
Írta: krisk - 2010. Október 17. - 15:53:08
Én is arra használom amúgy. :D mysql_fetch_row()-val közérakom, ezzel meg szétszedem.
Cím: [Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
Írta: TengeriMalac - 2010. December 19. - 13:18:37
Hát.. mivel azt mondtad, h \"maradi\" a gondolkodásmódom, ki akartam próbálni 0.3c RC5 alatt.
De sajnos b4szik betölteni a plugint, szoval ennyit errõl az egész sscanf dologról ^^
 
[12:30:37] Server Plugins
[12:30:37] --------------
[12:30:37]  Loading plugin: sscanf
[12:30:37]   Failed.
[12:30:37]  Loaded 0 plugins.
[/quote]
Cím: [Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
Írta: jana4 - 2010. December 19. - 14:06:51
Nálam mindig betöltõdik.
Szedd le ezt: http://www.y-less.com/YSI/sscanf.zip
 

[13:18:10]  Loading plugin: sscanf
[13:18:10]
[13:18:10]  ===============================
[13:18:10]       sscanf plugin loaded.   
[13:18:10]    © 2009 Alex \"Y_Less\" Cole
[13:18:10]  ===============================
[13:18:10]   Loaded.
[13:18:10]  Loaded 2 plugins.
 
[/quote]
Cím: [Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
Írta: TengeriMalac - 2010. December 19. - 14:20:54
Mostse tölti be XD
Cím: [Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
Írta: Stray - 2010. December 19. - 14:41:01
linux vagy windows?
Cím: [Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
Írta: TengeriMalac - 2010. December 19. - 15:32:10
windows.
Cím: [Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
Írta: Iceaac - 2010. December 19. - 18:34:04
Plugins mappába tedd be a plugint és server.cfgben:
 
plugins sscanf2

 
Így csináltad?
Cím: [Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
Írta: TengeriMalac - 2010. December 19. - 18:45:26
próbáltam sscanf, meg sscanf2-vel is
Cím: [Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
Írta: kurta999 - 2010. December 19. - 20:23:12
kattints a herére
Cím: [Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
Írta: TengeriMalac - 2010. December 19. - 21:19:10
te meg nyald meg ^^
amugy kösz, fentvan.
Cím: [Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
Írta: Depi - 2010. December 19. - 21:39:25
Van kód formájában is,használd azt,ezerszer jobb mint a strtok,
Cím: [Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
Írta: ZeRo - 2010. December 19. - 21:40:54
Idézetet írta: Draven date=1292791165\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"1375\" data-ipsquote-contentclass=\"forums_Topic
Van kód formájában is,használd azt,ezerszer jobb mint a strtok,
 
Ez igaz, viszont a pluginos verzió ~10x gyorsabb a simánál, szóval azt kellene mûködésre bírnia. :)
Cím: [Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
Írta: kurta999 - 2010. December 19. - 21:42:19
Idézetet írta: TengeriMalac date=1292789950\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"1375\" data-ipsquote-contentclass=\"forums_Topic
te meg nyald meg ^^
amugy kösz, fentvan.
 
Akk próbáld meg az összes elõzõt is felrakni..
Cím: [Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
Írta: TengeriMalac - 2010. December 19. - 22:27:55
Inkább a kód, de azt sehol nem találtam.
Valaki lnikelje :D
Cím: [Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
Írta: Iceaac - 2010. December 20. - 07:01:07
Idézetet írta: TengeriMalac date=1292794075\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"1375\" data-ipsquote-contentclass=\"forums_Topic
Inkább a kód, de azt sehol nem találtam.
Valaki lnikelje :D
 
Nekem még megvan a régi:
stock sscanf(string[], format[], {Float,_}:...)                                 // By Alex \"Y_Less\" Cole
{
#if defined isnull
if (isnull(string))
#else
if (string[0] == 0 || (string[0] == 1 && string[1] == 0))
#endif
{
   return format[0];
}
#pragma tabsize 4
new
formatPos = 0,
stringPos = 0,
paramPos = 2,
paramCount = numargs(),
delim = \' \';
while (string[stringPos] && string[stringPos] <= \' \')
{
stringPos++;
}
while (paramPos < paramCount && string[stringPos])
{
switch (format[formatPos++])
{
   case \'\\0\':
   {
      return 0;
   }
   case \'i\', \'d\':
   {
      new
         neg = 1,
         num = 0,
         ch = string[stringPos];
      if (ch == \'-\')
      {
         neg = -1;
         ch = string[++stringPos];
      }
      do
      {
         stringPos++;
         if (\'0\' <= ch <= \'9\')
         {
            num = (num * 10) + (ch - \'0\');
         }
         else
         {
            return -1;
         }
      }
      while ((ch = string[stringPos]) > \' \' && ch != delim);
      setarg(paramPos, 0, num * neg);
   }
   case \'h\', \'x\':
   {
      new
         ch,
         num = 0;
      while ((ch = string[stringPos]) > \' \' && ch != delim)
      {
         switch (ch)
         {
            case \'x\', \'X\':
            {
               num = 0;
               continue;
            }
            case \'0\' .. \'9\':
            {
               num = (num << 4) | (ch - \'0\');
            }
            case \'a\' .. \'f\':
            {
               num = (num << 4) | (ch - (\'a\' - 10));
            }
            case \'A\' .. \'F\':
            {
               num = (num << 4) | (ch - (\'A\' - 10));
            }
            default:
            {
               return -1;
            }
         }
      }
      setarg(paramPos, 0, num);
   }
   case \'c\':
   {
      setarg(paramPos, 0, string[stringPos++]);
   }
   case \'f\':
   {
      setarg(paramPos, 0, _:floatstr(string[stringPos]));
   }
   case \'p\':
   {
      delim = format[formatPos++];
      continue;
   }
   case \'\\\'\':
   {
      new
         end = formatPos - 1,
         ch;
      while ((ch = format[++end]) && ch != \'\\\'\') {}
      if (!ch)
      {
         return -1;
      }
      format[end] = \'\\0\';
      if ((ch = strfind(string, format[formatPos], false, stringPos)) == -1)
      {
         if (format[end + 1])
         {
            return -1;
         }
         return 0;
      }
      format[end] = \'\\\'\';
      stringPos = ch + (end - formatPos);
      formatPos = end + 1;
   }
   case \'u\':
   {
      new
         end = stringPos - 1,
         id = 0,
         bool:num = true,
         ch;
      while ((ch = string[++end]) && ch != delim)
      {
         if (num)
         {
            if (\'0\' <= ch <= \'9\')
            {
               id = (id * 10) + (ch - \'0\');
            }
            else
            {
               num = false;
            }
         }
      }
      if (num && IsPlayerConnected(id))
      {
         setarg(paramPos, 0, id);
      }
      else
      {
         #if !defined foreach
            #define foreach(%1,%2) for (new %2 = 0; %2 < MAX_PLAYERS; %2++) if (IsPlayerConnected(%2))
            #define __SSCANF_FOREACH__
         #endif
         string[end] = \'\\0\';
         num = false;
         new
            sscanfname[MAX_PLAYER_NAME];
         id = end - stringPos;
         foreach (Player, playerid)
         {
            GetPlayerName(playerid, sscanfname, sizeof (sscanfname));
            if (!strcmp(sscanfname, string[stringPos], true, id))
            {
               setarg(paramPos, 0, playerid);
               num = true;
               break;
            }
         }
         if (!num)
         {
            setarg(paramPos, 0, INVALID_PLAYER_ID);
         }
         string[end] = ch;
         #if defined __SSCANF_FOREACH__
            #undef foreach
            #undef __SSCANF_FOREACH__
         #endif
      }
      stringPos = end;
   }
   case \'s\', \'z\':
   {
      new
         i = 0,
         ch;
      if (format[formatPos])
      {
         while ((ch = string[stringPos++]) && ch != delim)
         {
            setarg(paramPos, i++, ch);
         }
         if (!i)
         {
            return -1;
         }
      }
      else
      {
         while ((ch = string[stringPos++]))
         {
            setarg(paramPos, i++, ch);
         }
      }
      stringPos--;
      setarg(paramPos, i, \'\\0\');
   }
   default:
   {
      continue;
   }
}
while (string[stringPos] && string[stringPos] != delim && string[stringPos] > \' \')
{
   stringPos++;
}
while (string[stringPos] && (string[stringPos] == delim || string[stringPos] <= \' \'))
{
   stringPos++;
}
paramPos++;
}
do
{
if ((delim = format[formatPos++]) > \' \')
{
   if (delim == \'\\\'\')
   {
      while ((delim = format[formatPos++]) && delim != \'\\\'\') {}
   }
   else if (delim != \'z\')
   {
      return delim;
   }
}
}
while (delim > \' \');
return 0;
}

 
Ezt beteheted INCbe, vagy ha úgy gondolod, a módba..
Cím: [Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
Írta: TengeriMalac - 2010. December 20. - 12:52:25
Kösz.
Cím: [Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
Írta: KowaZ - 2011. Január 08. - 10:58:00
Miért mondja mindenki, hogy sokkal gyorsabb és hatékonyabb, mint az strtok? Már a kódjára is elég ránézni: sokkal hosszabb és összetettebb, ezért szerintem lassabb is.
Vagy volt esetleg aki alátámasztotta a gyorsaságát futásidejû összehasonlításokkal? Én szerintem még mindig az strtok a legoptimálisabb megoldás.
KowaZ
Cím: [Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
Írta: Sheet - 2011. Január 08. - 11:01:12
Idézetet írta: KowaZ date=1294480680\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"1375\" data-ipsquote-contentclass=\"forums_Topic
Miért mondja mindenki, hogy sokkal gyorsabb és hatékonyabb, mint az strtok? Már a kódjára is elég ránézni: sokkal hosszabb és összetettebb, ezért szerintem lassabb is.
Vagy volt esetleg aki alátámasztotta a gyorsaságát futásidejû összehasonlításokkal? Én szerintem még mindig az strtok a legoptimálisabb megoldás.
KowaZ
 
Egyetértek :)
OFF// 250. Hsz :D:D
Cím: [Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
Írta: ChuckNorris - 2011. Január 08. - 12:12:22
Idézetet írta: KowaZ date=1294480680\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"1375\" data-ipsquote-contentclass=\"forums_Topic
Miért mondja mindenki, hogy sokkal gyorsabb és hatékonyabb, mint az strtok? Már a kódjára is elég ránézni: sokkal hosszabb és összetettebb, ezért szerintem lassabb is.
Vagy volt esetleg aki alátámasztotta a gyorsaságát futásidejû összehasonlításokkal? Én szerintem még mindig az strtok a legoptimálisabb megoldás.
KowaZ
 
Nem,a sscanf a jobb,a futásidejük össze lett hasonlítva, valahol láttam a témát de már nem emlékszem hol,lehet hogy a hiv. fórumon.És ezt nem így kell nézni,hogy melyik kód a hosszabb,attól még dolgozhat gyorsabban.
E:
Ja,bocs,te a kód változatról beszélsz ugye?A plugin verziót kell használni,az pontosan 10X gyorsabb.
Cím: [Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
Írta: KowaZ - 2011. Január 08. - 12:42:44
Idézetet írta: ChuckNorris date=1294485142\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"1375\" data-ipsquote-contentclass=\"forums_Topic


Miért mondja mindenki, hogy sokkal gyorsabb és hatékonyabb, mint az strtok? Már a kódjára is elég ránézni: sokkal hosszabb és összetettebb, ezért szerintem lassabb is.
Vagy volt esetleg aki alátámasztotta a gyorsaságát futásidejû összehasonlításokkal? Én szerintem még mindig az strtok a legoptimálisabb megoldás.
KowaZ
 
Nem,a sscanf a jobb,a futásidejük össze lett hasonlítva, valahol láttam a témát de már nem emlékszem hol,lehet hogy a hiv. fórumon.És ezt nem így kell nézni,hogy melyik kód a hosszabb,attól még dolgozhat gyorsabban.
E:
Ja,bocs,te a kód változatról beszélsz ugye?A plugin verziót kell használni,az pontosan 10X gyorsabb.
 
[/quote]
Igen, én a kód változatról beszéltem, mivel az strtok-ot is PAWN nyelven szokták használni. Elfogadom, hogy a sscanf plugin változata jobb mint a PAWN-os strtok.
De mi lenne ha az strtok-ot is pluginban megírná valaki? Az szerintem mindennél gyorsabb lenne. Vagy nem?
KowaZ
Cím: [Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
Írta: nyE - 2011. Január 08. - 12:49:40
Idézetet írta: KowaZ date=1294486964\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"1375\" data-ipsquote-contentclass=\"forums_Topic


 

Miért mondja mindenki, hogy sokkal gyorsabb és hatékonyabb, mint az strtok? Már a kódjára is elég ránézni: sokkal hosszabb és összetettebb, ezért szerintem lassabb is.
Vagy volt esetleg aki alátámasztotta a gyorsaságát futásidejû összehasonlításokkal? Én szerintem még mindig az strtok a legoptimálisabb megoldás.
KowaZ
 
Nem,a sscanf a jobb,a futásidejük össze lett hasonlítva, valahol láttam a témát de már nem emlékszem hol,lehet hogy a hiv. fórumon.És ezt nem így kell nézni,hogy melyik kód a hosszabb,attól még dolgozhat gyorsabban.
E:
Ja,bocs,te a kód változatról beszélsz ugye?A plugin verziót kell használni,az pontosan 10X gyorsabb.
 
[/quote]
Igen, én a kód változatról beszéltem, mivel az strtok-ot is PAWN nyelven szokták használni. Elfogadom, hogy a sscanf plugin változata jobb mint a PAWN-os strtok.
De mi lenne ha az strtok-ot is pluginban megírná valaki? Az szerintem mindennél gyorsabb lenne. Vagy nem?
KowaZ
 
[/quote]
Most, hogy kitaláltad mértnem írod meg?
Tudtommal kellõ tudásod megvan hozzá, már csak szabadidõ kell.
Cím: [Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
Írta: ChuckNorris - 2011. Január 08. - 12:55:14
Idézetet írta: KowaZ date=1294486964\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"1375\" data-ipsquote-contentclass=\"forums_Topic


 

Miért mondja mindenki, hogy sokkal gyorsabb és hatékonyabb, mint az strtok? Már a kódjára is elég ránézni: sokkal hosszabb és összetettebb, ezért szerintem lassabb is.
Vagy volt esetleg aki alátámasztotta a gyorsaságát futásidejû összehasonlításokkal? Én szerintem még mindig az strtok a legoptimálisabb megoldás.
KowaZ
 
Nem,a sscanf a jobb,a futásidejük össze lett hasonlítva, valahol láttam a témát de már nem emlékszem hol,lehet hogy a hiv. fórumon.És ezt nem így kell nézni,hogy melyik kód a hosszabb,attól még dolgozhat gyorsabban.
E:
Ja,bocs,te a kód változatról beszélsz ugye?A plugin verziót kell használni,az pontosan 10X gyorsabb.
 
[/quote]
Igen, én a kód változatról beszéltem, mivel az strtok-ot is PAWN nyelven szokták használni. Elfogadom, hogy a sscanf plugin változata jobb mint a PAWN-os strtok.
De mi lenne ha az strtok-ot is pluginban megírná valaki? Az szerintem mindennél gyorsabb lenne. Vagy nem?
KowaZ
 
[/quote]
Szerintem ha ez így lenne,akkor már megcsinálta volna valaki a hiv. fórumon,mégsem tette senki,szerintem ennek oka van.Meg a sscanf sokkal sokoldalúbb is meg egyszerûbb,sokkal több a beálítási lehetõség,bevallom õszintén strtokot nem tudnám használni segítség nélkül,sscanfot meg igen,pedig nem ma kezdtem az ipart.
Különben a sscanf kód verzióját úgy tudom levették a wikirõl is,mivel Y_Less (a készítõ) nem ajálja a használatát.
Cím: [Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
Írta: TengeriMalac - 2011. Január 08. - 13:08:30
Akkor a készítõ [Y_Less] tövig kiszophat, minek írta meg, ha nem ajánlja használni?!
20x jobb az strtok, mert nem kell hozzá szaros plugin, se .NET 4.0, sem semmi...
Sokoldalúbb az biztos, de hosszabb, plugin kell hozzá, és több a hibalehetõség..
Cím: [Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
Írta: KowaZ - 2011. Január 08. - 13:22:22
Lehet hogy sokoldalúbb, viszont tegyük fel a kérdést: Szükség van egy ilyen sokat tudó függvényre?
Én maximum 3 helyen használtam az strtok-ot (amit ki tud váltani a sscanf): parancsok, SQL-lekérdezések és fájlból olvasás. Mindegyik tökéletesen megoldható az strtok-kal.
Extrém esetekhez persze jól jöhet a sscanf, de én akkor is az strtok-ot preferálom, mert nem tudom miért lenne gyorsabb egy olyan függvény, amely ezeregy lehetõséget biztosít. Az emberek 99%-ának meg semmi szüksége rá.
KowaZ
Cím: [Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
Írta: ChuckNorris - 2011. Január 08. - 13:27:30
Ti félreértettetek engem,szóval:
Tudjátok van sima PAWN kód és van plugin verzió,és Y_Less a  PAWN kód verziót nem ajálja,a plugint igen...
 
Idézetet írta: KowaZ date=1294489342\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"1375\" data-ipsquote-contentclass=\"forums_Topic
Lehet hogy sokoldalúbb, viszont tegyük fel a kérdést: Szükség van egy ilyen sokat tudó függvényre?
Én maximum 3 helyen használtam az strtok-ot (amit ki tud váltani a sscanf): parancsok, SQL-lekérdezések és fájlból olvasás. Mindegyik tökéletesen megoldható az strtok-kal.
Extrém esetekhez persze jól jöhet a sscanf, de én akkor is az strtok-ot preferálom, mert nem tudom miért lenne gyorsabb egy olyan függvény, amely ezeregy lehetõséget biztosít. Az emberek 99%-ának meg semmi szüksége rá.
KowaZ
 
Ez különösen a parancsoknál hasznos....Ott van használva a legtöbbször.
Én rengeteg funkcióját használom,mert sokkal könnyebb velük minden.Szerintem te azért mondod ezt,mert nem tudod mire is képes.Adok egy hiv. fórum linket:
http://forum.sa-mp.com/showthread.php?t=120356&highlight=sscanf2+plugin
Le van írva minden A-tól Z-ig .
 

Ez így van, de tegyük fel a kérdést: Miért ne használjunk egy sokoldalúbb algoritmust, ha az gyorsabb is mint az strtok?
 
[/quote]
Egyetértek.
Cím: [Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
Írta: KowaZ - 2011. Január 08. - 14:21:49
Készítettem egy futásidõ mérõ tesztet a pluginos sscanf és a PAWN-os strtok esetében, ami alapján a sscanf gyorsabbnak bizonyult. Már csak az a kérdés, hogy ha pluginban lenne mind a kettõ, akkor milyen eredményre jutnánk.
KowaZ
Cím: [Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
Írta: ZeRo - 2011. Január 08. - 14:33:36
Idézetet írta: TengeriMalac date=1294488510\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"1375\" data-ipsquote-contentclass=\"forums_Topic
Akkor a készítõ [Y_Less] tövig kiszophat, minek írta meg, ha nem ajánlja használni?!
20x jobb az strtok, mert nem kell hozzá sz*ros plugin, se .NET 4.0, sem semmi...
Sokoldalúbb az biztos, de hosszabb, plugin kell hozzá, és több a hibalehetõség..
 
Azt elõbb írta meg, a plugin változatát pedig késõbb, ezért már nem ajánlja a régit.
Cím: [Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
Írta: KowaZ - 2011. Január 08. - 21:24:40
Idézetet írta: Spatrik date=1294512720\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"1375\" data-ipsquote-contentclass=\"forums_Topic


Készítettem egy futásidõ mérõ tesztet a pluginos sscanf és a PAWN-os strtok esetében, ami alapján a sscanf gyorsabbnak bizonyult. Már csak az a kérdés, hogy ha pluginban lenne mind a kettõ, akkor milyen eredményre jutnánk.
KowaZ
 
Ez nem kérdés, gyorsabb lenne mert egy egyszerûbb algoritmus.
[/quote]
Tehát mégis csak jobb az strtok használata az általam említett egyszerû (hétköznapi) esetekre. Csak meg kell írni C++ban. Köszönöm a közremûködéseket!
KowaZ
Cím: [Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
Írta: Gamestar - 2011. Január 08. - 22:12:14
Ilyen egyszerû dolgokért miért kérsz tanácsot?
Cím: [Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
Írta: KowaZ - 2011. Január 09. - 14:24:24
Idézetet írta: GameStar date=1294521134\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"1375\" data-ipsquote-contentclass=\"forums_Topic
Ilyen egyszerû dolgokért miért kérsz tanácsot?
 
Egyszerû? Akkor megkérnélek, hogy készítsd el az strtok plugin változatát.
KowaZ
Cím: [Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
Írta: TengeriMalac - 2011. Február 02. - 15:05:40
Veszekedést félretéve, hogy csináljam, hogy egy karakterláncot, vagy egy játékos Idt fogadjon el? [mint pl \"u\", felhasználónév/id] //Gang Scripthez kell
Cím: [Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
Írta: kurta999 - 2011. Február 02. - 19:23:19
Egy példa, ha gangnál ID vagy név szerint akarsz választani:
 

CMD:car(playerid, params[])
{
carid,
if(sscanf(params, \"s[128]\", i_str)) return SendClientMessage(playerid, COLOR_RED, \"HASZNÁLAT: /car <Model ID/Név>\");
if(!IsNumeric(i_str))
{
carid = GetVehicleModelIDFromName(i_str);
}
else
{
carid = strval(i_str);
}
vID = CreateVehicle(carid, X, Y, Z, Angle, color[0], color[1], -1);
return 1;
}
Cím: [Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
Írta: TengeriMalac - 2011. Február 02. - 20:20:35
Mármint úgy, hogy CMD:gang
akkor az elsõ paraméter, a \"create, join, quit\", ilyenek string
második paraméter a joinnál az ID, createnél, meg invitenél meg egy név, azaz string.
ezt hogy lehet
Cím: [Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
Írta: kurta999 - 2011. Február 02. - 20:23:44
CMD:car(playerid, params[])
{
carid,
if(sscanf(params, \"s[128]s[128]\", i_str, tmp)) return SendClientMessage(playerid, COLOR_RED, \"HASZNÁLAT: /car <Join/Leave> <Model ID/Név>\");
if(!strcmp(i_str, \"join\", true))
{
   if(!IsNumeric(tmp))
   {
      carid = GetVehicleModelIDFromName(tmp);
   }
   else
   {
      carid = strval(tmp);
   }
}
else if(!strcmp(i_str, \"leave\", true))
{
   if(!IsNumeric(tmp))
   {
      carid = GetVehicleModelIDFromName(tmp);
   }
   else
   {
      carid = strval(tmp);
   }
}
else SendClientMessage(playerid, COLOR_RED, \"Hülye vagy\");
return 1;
}
Cím: [Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
Írta: TengeriMalac - 2011. Február 02. - 20:41:46
Kössz :D
Cím: [Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
Írta: kurta999 - 2011. Február 02. - 20:44:18
nm xD
Cím: [Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
Írta: SubZero - 2011. Február 16. - 21:38:59
A kód formátumú kezeli az elválasztásokat?
Vagy esetleg nálam van a hiba?
 
sscanf(Line,\"p<|>{ds[25]}s[20]{s[25]s[25]ddddddd}\",Password);
Cím: [Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
Írta: kurta999 - 2011. Február 16. - 22:12:15
Idézetet írta: subzero date=1297888739\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"1375\" data-ipsquote-contentclass=\"forums_Topic
A kód formátumú kezeli az elválasztásokat?
Vagy esetleg nálam van a hiba?
 
sscanf(Line,\"p<|>{ds[25]}s[20]{s[25]s[25]ddddddd}\",Password);

 

Ez bug, de attól függetlenül megy, nálam is ezvan.  Y_Less-nek már jelentettem, de még nem javította.
Cím: [Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
Írta: SubZero - 2011. Február 17. - 15:18:37
És kilehet valahogy küszöbölni?
Cím: [Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
Írta: kurta999 - 2011. Február 17. - 16:53:54
Idézetet írta: subzero date=1297952317\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"1375\" data-ipsquote-contentclass=\"forums_Topic
És kilehet valahogy küszöbölni?
 
Hááát... Ez attól függ, hogy hol használod.
Cím: [Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
Írta: ZeRo - 2011. Február 26. - 12:48:37
Karakteres elválasztás hozzáadva!
Cím: [Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
Írta: ZeRo - 2011. Május 09. - 21:16:15
Letöltést link frissítve az újabb sscanf kiadás miatt!
Cím: [Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
Írta: kadaradam - 2011. Szeptember 04. - 16:30:50
MySQL scripteknél észrevettem,hogy szintee mindegyik scipt úgy épül fel,hogy az sscanf segítségével választjuk ki az adatokat!
[pawn]new values[5];
sscanf(Query, \"p<|>{s[24]s[129]s[16]}a<i>[5]\", values);
SetPVarInt(playerid, \"Admin\", values[0]);
GivePlayerMoney(playerid, values[1]);
SetPlayerScore(playerid, values[2]);
SetPVarInt(playerid, \"Kills\", values[3]);
SetPVarInt(playerid, \"Deaths\", values[4]);
SetPVarInt(playerid, \"Logged\", 1);[/pawn]
És ezt még megszeretném érteni valahogy, tehát valaki megtudná nekem mondani,hogy pl az accounts táblából hogyan válasszam ki a LastOn-t,RegDate-t,GameTime-t,Skin-t?
Cím: [Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
Írta: ChuckNorris - 2011. Szeptember 04. - 17:41:43
Idézetet írta: kadaradam date=1315146650\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"1375\" data-ipsquote-contentclass=\"forums_Topic
MySQL scripteknél észrevettem,hogy szintee mindegyik scipt úgy épül fel,hogy az sscanf segítségével választjuk ki az adatokat!
[pawn]new values[5];
sscanf(Query, \"p<|>{s[24]s[129]s[16]}a<i>[5]\", values);
SetPVarInt(playerid, \"Admin\", values[0]);
GivePlayerMoney(playerid, values[1]);
SetPlayerScore(playerid, values[2]);
SetPVarInt(playerid, \"Kills\", values[3]);
SetPVarInt(playerid, \"Deaths\", values[4]);
SetPVarInt(playerid, \"Logged\", 1);[/pawn]
És ezt még megszeretném érteni valahogy, tehát valaki megtudná nekem mondani,hogy pl az accounts táblából hogyan válasszam ki a LastOn-t,RegDate-t,GameTime-t,Skin-t?
 
Nem egészen,a sscanf az adatok feldolgozására (jelen esetben a karakterlánc feldarabolásáûra és az értékek változókba helyezése) a feladata. Az adatokat a mysql pluginunk beépített fügvényével választjuk ki,álltalában ez a mysql_query.
Ha kiválasztasz egy sort az adatbázisodból ez így épül fel:
1|kadaradam|40000|2011-10-10|asdasd
És ezt a karakterláncot vágja fel a ssancf neked és rakja változókba. Hogy ezeket hogyan szedd ki mysql-ból le van írva ebben az alfórumban a mysql tutorialomban.
Cím: [Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
Írta: kurta999 - 2011. November 08. - 16:08:55
0.3d-hez .dll + forráskód
Ezt már nemkell újítani, mivel SAMP GDK-val van megoldva.
Cím: [Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
Írta: ZeRo - 2011. November 08. - 17:19:01
Kösz, kicseréltem a linket a fõposztban. ;)
Cím: [Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
Írta: kurta999 - 2011. November 08. - 17:43:21
Nincs mit.
Bár szerintem még nem fontos cserélni, mivel ez csak windows-hoz van (jelenleg) és nem Y_Less adta ki hivatalosan :D
Majd ha lesz idõd, akkor az Tömbök betöltésével is írhatnál hozzá pár dolgot, az is sokat segítene sokmindekinnek, mert sokan azt se tudják, hogy mi az.
Példa:
[pawn]
new
WeaponSkill[11],
sscanf(i_str, \"p<,>A<i>(0)[11]\", WeaponSkill);
[/pawn]
Cím: [Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
Írta: ZeRo - 2011. November 08. - 21:21:34
Hát az a helyzet, hogy én már egy ideje leálltam ezzel az egész szkripting  dologgal, de ha veszed a fáradtságot, és megírsz egy részt arról/azokról a dolgokról amiket hiányolsz, és elküldöd nekem PM-ben, akkor beillesztem a fõposztba, és természetesen feltüntetem a nevedet is mellette. :)
Cím: [Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
Írta: IPhoneman96 - 2011. November 24. - 19:14:05
Nekem ezzel az a bajom hogy csinál mg egy login/register de nem is jegyzi meg mindig registration valaki ötlet  kikapcsolására?
Cím: [Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
Írta: ZeRo - 2011. November 24. - 20:34:18
Idézetet írta: IPhoneman96 date=1322158445\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"1375\" data-ipsquote-contentclass=\"forums_Topic
Nekem ezzel az a bajom hogy csinál mg egy login/register de nem is jegyzi meg mindig registration valaki ötlet  kikapcsolására?
 
Hát ezt sajnos nem teljesen értettem.
Cím: [Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
Írta: IPhoneman96 - 2011. November 24. - 22:08:22
Eddig volt nekem saját login/register systeme és mióta beraktam a sscanfot azóta van egy másik lett hirtelen kick bann és hasonló parancsok pedig be se raktam és hogy ezt nem lehet valahogy kikapcsolni vagy valahogy kivenni mert ezek nekem nem kellenek csak a csupasz sscanf
Cím: [Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
Írta: kurta999 - 2012. Január 22. - 02:40:54
Újabb verzió elérhetõ!
sscanf 2.5 letöltése!
Írtam hozzá pár dolgot. Ajánlom a legelsõ részét elolvasni.
 



A legújabb sscanf verzióban bekerült egy új elválasztó, ami a \"k\". E elválasztó segítségével létre lehet hozni saját specifiert.
 

SSCANF:playerstate(string[])
{
if (\'0\' <= string[0] <= \'9\')
{
new
   ret = strval(string);
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 ezt a kódot belerakod a módodba, akkor ez hozzáadja a \"playerstate\" nevû specifier-t. Következõ képpen tudod ezt használni:
[pawn]
sscanf(params, \"uk<playerstate>\", playerid, state);
[/pawn]
Ez a rendszer szintén támogatja az alapértelmezett értéket. Itt a az alapértelmezett érték a \"PLAYER_STATE_NONE\" lesz:
[pawn]
sscanf(params, \"uK<playerstate>(PLAYER_STATE_NONE)\", playerid, state);
[/pawn]
Az új \"sscanf2.inc\" függvénykönyvtár tartalma két darab specifier-t. Ez a \"k<weapon>\" és a \"k<vehicle>\". Ennek a segítségével letudsz hívni fegyvert/kocsit ID, vagy név szerint. Ha nem ID-t írsz, akkor lefut a \"weapon\"/\"vehicle\" rész és név szerint kikeresi neked az ID-t és azzal tér vissza.
Az egyéni specifier-ek nem támogatják a tömböket és az enumokat!
Jegyezd meg, hogy az egyedi specifier-nek a bemenet típusa mindig karakterlánc, és mindig egy számmal tár vissza. Ez lehet Float, bool, vagy akármilyen más egy cellás tag típus.
 



Keresni egy általunk beírt karakterláncra egy megadott karakterláncban a következõ képpen tudunk:
[pawn]sscanf(\"10 11 woo 12\", \"i\'woo\'i\", var0, var1);[/pawn]
A kimenet a következõ lesz:
 

var0 = 10
var1 = 12

 




Rengeteg helyen észreveszem, hogy a beírt ID-t IsPlayerConnected() el ellenõrzik le.
Ez pedig felesleges, mivel az sscanf-nél ha az \"u\" paramétert használod, akkor az automatikusan leellenõrzni, hogy a játékos csatlakozva-e van. Ha nincs, akkor 0xFFFF-el fog visszatérni = (65535 = INVALID_PLAYER_ID).
Tehát elég lenne ennyit is csinálni:
[pawn]if(sscanf(params, \"ui\", player1, score)) return SendClientMessage(playerid, COLOR_RED, \"HASZNÁLAT: /setscore <Játékos ID/Név> <Pont>\");
if(player1 == INVALID_PLAYER_ID) return SendClientMessage(playerid, COLOR_RED, \"HIBA: Játékos nincs csatlakozva!\");
[/pawn]
Cím: [Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
Írta: lackos888 - 2012. Január 22. - 08:38:21
Szerintem nem éri meg váltani sscanf 2.5-re, a szerverem be bugolt miatta..Visszaraktam a régi sscanf-et a 2.0-t és egybõl jó lett
Cím: [Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
Írta: kurta999 - 2012. Január 22. - 11:56:15
Töröld a callback hook rendszert az include-bõl, és írd bele a módodba!
Nekem is ezvolt a problémám, megcsináltam és ment minden.
De szerintem ezt Y_Less javítani fogja..
Cím: [Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
Írta: lackos888 - 2012. Január 22. - 15:14:52
Ok majd megcsinem, kösz kurta!:D
Cím: [Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
Írta: kurta999 - 2012. Április 02. - 21:58:34
Elérhetõ a 2.6-os verzió, abban már javítva van az \"u\" paraméter, amikor nemlétezõ játékosokra nem INVALID_PLAYER_ID-vel tért vissza.
Cím: [Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
Írta: kurta999 - 2012. December 28. - 10:18:03
Megjelent a 2.8.1-es verzió, amiben nagyon sok hasznos új lehetõség bekerült.
Érdemes elolvasni újra az üzenetet, nem írom ki mik az újak benne.
http://forum.sa-mp.com/showthread.php?t=120356
Cím: [Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
Írta: martinpozs - 2016. Január 09. - 15:07:04
Én mindent úgy csináltam, ahogy kell, ahogy szépen leírtad, de érdekes!!! Nekem miért nem jó, és amúgy NINCSEN BENNE az sscanf2.inc abba a letöltési mappádba se... és nem ismeri fel, ha beleteszem, ha beleírom a server mappába a plugins-t, és az elejére is a scriptnek ,semmi, valyon miért lehet, valaki help pls, mert már a vérnyomásom min. 1000-en van :D
Cím: [Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
Írta: almightymartin - 2016. Január 10. - 00:24:23
A téma indítója, szerintem most forgott meg a sírjában.
Cím: [Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
Írta: Pedró - 2016. Január 10. - 08:28:16
Idézetet írta: almightymartin date=1452381863\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"1375\" data-ipsquote-contentclass=\"forums_Topic
A téma indítója, szerintem most forgott meg a sírjában.
 
Elhunyt? :\'(