String gavimas

Šiame forume rašomi vartotojų klausimai/problemos su kuriomis jie susidūrė kuriant pluginus.
addinol
Jau po truputį tampa savu
Posts: 144
Joined: 2010 Sep 05 15:20
Skype: kasparas94

String gavimas

Post by addinol »

Sveiki, kaip gauti string išskyrus 2 pirmus jo parametrus,

mano string sudaro tarkim.

'!kick addinol uz cheatinima ir kodinima'

noriu gauti 'uz cheatinima ir kodinima'.

Naudoju parse, bet tada gaunu tik atskirus žodžius, arba reikia dėti kabutes "uz cheatinima ir kodinima" įmanoma kaip nors be kabučių ?

Code: Select all

new text[190];read_args(text, sizeof text - 1);remove_quotes(text);     new cmd[6], target[32], reason[128];parse(text[1], cmd, sizeof cmd - 1, target, sizeof target - 1, reason, sizeof reason - 1 );
Jei mano string bus !kick addinol uz cheatinima ir kodinima, tai išsiskirstys į:

cmd !kick
target addinol
reason uz

o jei bus !kick addinol "uz cheatinima ir kodinima", tai išsiskirstys į:
cmd !kick
target addinol
reason uz cheatinima ir kodinima

Bet ar įmanoma padaryti, jog tą paskutinį punktą 'reason' gautų visą iki galo, ir nereiktų naudoti kabučių šiuo atveju.

User avatar
aaarnas
Vyr. diskusijų administratorius
Posts: 3891
Joined: 2010 Aug 31 13:21
Skype: fiarno
Contact:

Re: String gavimas

Post by aaarnas »

Galima mėginti taip:

Code: Select all

    new lenght = strlen(message)    new param    new slot    new cmd[48], nick[40], reason[128]    for(new i=0; i<lenght; i++) {                            if(!text[i]) break;                            if(text[i] == ' ') { param++; slot = i; }                            switch(param) {            case 0: {                cmd[i] = text[i]                cmd[i+1] = 0            }            case 1: {                nick[i-slot] = text[i]                nick[i-slot+1] = 0            }            case 2: {                reason[i-slot] = text[i]                reason[i-slot+1] = 0            }        }    }
Palikau CS pasaulį ;/ . Nebepasiekiamas.

addinol
Jau po truputį tampa savu
Posts: 144
Joined: 2010 Sep 05 15:20
Skype: kasparas94

Re: String gavimas

Post by addinol »

Tai juk vistiek skaičiuos kaip atskirus parametrus reason žodžius su tarpais

Code: Select all

if(text[i] == ' ') { param++; slot = i; }
Jei bus, Labas rytas sveciai, tai čia bus 3 param
Labas
rytas
sveciai

User avatar
hleV
AMX Mod X ekspertai
Posts: 875
Joined: 2011 Apr 02 11:23
Skype: hlev.lt
Location: Šiauliai

Re: String gavimas

Post by hleV »

Code: Select all

new cmd[6], target[32];parse(text[1], cmd, sizeof cmd - 1, target, sizeof target - 1); new reason[128];copy(reason, sizeof reason - 1, text[strlen(cmd) + strlen(target) /*+- 1?*/]); // Gali tekt pasizaist su tuo +-trim(reason);
Image ← RIP best userbar
DISKUSIJA: KIETAS PLUGIN'O UŽSAKOVAS
Privačios pagalbos neteikiu!

addinol
Jau po truputį tampa savu
Posts: 144
Joined: 2010 Sep 05 15:20
Skype: kasparas94

Re: String gavimas

Post by addinol »

-1 duoda tokį result:

!kick player uz kodinima ir cheatinima
reason: yer uz kodinima ir cheatinima

+1 duoda tokį result:


!kick player uz kodinima ir cheatinima
reason: r uz kodinima ir cheatinima

o neįmanoma vėl gauti viso string ir replacint '!cmd' ir 'target' su '' ?

User avatar
hleV
AMX Mod X ekspertai
Posts: 875
Joined: 2011 Apr 02 11:23
Skype: hlev.lt
Location: Šiauliai

Re: String gavimas

Post by hleV »

Tai blet, nedaėjo pabandyt su + 2? :D
Image ← RIP best userbar
DISKUSIJA: KIETAS PLUGIN'O UŽSAKOVAS
Privačios pagalbos neteikiu!

newb
Pluginų patvirtintojas
Posts: 1047
Joined: 2010 Sep 23 21:43
Location: Wonderland
Contact:

Re: String gavimas

Post by newb »

Galima dar taip

Code: Select all

public said(id) {    static arg[60]    read_argv(1, arg, charsmax(arg))        if(equal(arg, "!kick", 5)) {        new target[20], reason[40]                replace(arg, charsmax(arg), "!kick ", "")                 strtok(arg, target, charsmax(target), reason, charsmax(reason), ' ')                client_print(id, 3, "target = %s", target)        client_print(id, 3, "reason = %s", reason)                return PLUGIN_HANDLED    }        return PLUGIN_CONTINUE}

addinol
Jau po truputį tampa savu
Posts: 144
Joined: 2010 Sep 05 15:20
Skype: kasparas94

Re: String gavimas

Post by addinol »

newb wrote:Galima dar taip

Code: Select all

public said&#40;id&#41; &#123;    static arg&#91;60&#93;    read_argv&#40;1, arg, charsmax&#40;arg&#41;&#41;        if&#40;equal&#40;arg, "!kick", 5&#41;&#41; &#123;        new target&#91;20&#93;, reason&#91;40&#93;                replace&#40;arg, charsmax&#40;arg&#41;, "!kick ", ""&#41;                 strtok&#40;arg, target, charsmax&#40;target&#41;, reason, charsmax&#40;reason&#41;, ' '&#41;                client_print&#40;id, 3, "target = %s", target&#41;        client_print&#40;id, 3, "reason = %s", reason&#41;                return PLUGIN_HANDLED    &#125;        return PLUGIN_CONTINUE&#125;
Dėkui, veikia, turbūt čia geriausias būdas :)

-- 2011 Geg 11 20:13 --

o jeigų 3 parametrai ir likęs reason ?

tarkim

!ban name time reason

Code: Select all

new target[20], reason[40], bantime[11];                   replace(arg, charsmax(arg), "!ban ", "")                   strtok(arg, target, charsmax(target), bantime, charsmax(bantime), reason, charsmax(reason), ' ')
errorą meta:
Error: Argument type mismatch (argument 6)

newb
Pluginų patvirtintojas
Posts: 1047
Joined: 2010 Sep 23 21:43
Location: Wonderland
Contact:

Re: String gavimas

Post by newb »

2 kartus strtok naudot, bet gal ir geresnis budas yra.

addinol
Jau po truputį tampa savu
Posts: 144
Joined: 2010 Sep 05 15:20
Skype: kasparas94

Re: String gavimas

Post by addinol »

o tai kaip antrą kart su tuo strtok gauti, nesuprantu jo kaip jis veikia, pirmą kart naudoju, suprantu tik tiek jog paima iš dešinės string ir iš kairės, daugiau nieko negaudau ;D

ką pirmam strtok'e gauti ir ką antram, pirmam target ir time antram reason ?

Post Reply

Who is online

Users browsing this forum: No registered users and 4 guests