[TuT][Pawn] String library

Započeo Zarathos, Jul 05, 2011, 18:09:40 POSLE PODNE

prethodna tema - sledeća tema

0 članova i 3 gostiju pregledaju ovu temu.

    [Pawn]String library

    Evo, posto vidim da se svi patite i komplicirate sebi zivot ( a i drugima ) sa stringovima, varijablama, uporedjivanjima i slicno, odlucio sam da vas upoznam sa laksim nacinom. To jeste laksim nacinom izvodjenja kompliciranih naredbi pomocu najjednostavnijih funkcija...

    Evo da vas upoznam sa prvom funkcijom koja po mom misljenju i nema neki znacaj, posto stvari koje ja radim ne zahtjevaju ovakve funckije...



    1# funckija je i ujedno najrasirenija i najkomplikovanija, iako slabo tko zna sta ona zapravo radi, ja cu vam objasniti:

    Strcmp(const string1[], const string2[], bool:ignorecase, length);
     
    Ovo je funckija koja sluzi za uporedjivanje 2 stringa/sloga. Njeni argumenti su:
    string1[] - Prvi string
    string2[] - Drugi string
    bool:ignorecase - E ovo je ono sto vecinu zbunjuje, a sama rijec kaze: "ignorecase", ako stavite true vrijedit ce:

    KuCa ce biti isto kao kuca pa time ce returnati 0 ( sjetite se u GF-u uvijek onoga == 0 poslije strmp :) ), a ako stavite false:
    kuca nece biti jednako KuCa i onda ce returnati 1 ili -1, zavisno od mjesta stringa ( -1 ako je string1 prije stringa2, a 1 ako je obrnuto)

    length ( opcionalno ) - Kada ovo postavite, vi postavljate "daljinu" do koje strcmp uporeÄ'uje 2 stringa. npr. Kuca ce biti jednako Kufa ako stavite duzinu = 3.




    2# funkcija je strfind. I ona je donekle poznata mnogima...
    Da ovo objasnimo možemo se posluziti jednostavnim primjerom iz zivota: Traženje igle u plastu sijena... Upravo to ova funkcija radi, trazi neki skup znakova u stringu.


    Strfind(const string[],const sub[],bool:ignorecase=false,pos=0)
    const string[] - slog/string u kojem zelimo da nadjemo skup znakova.
    const sub[] - skup znakova koji trazimo u stringu.
    bool:ignorecase - isto kao i za strcmp ( procitati paragraf iznad za vise informacija )
    pos - mjesto u stringu odakle pocinje pretraga





    #3 funkcija, manje poznata, ali ipak veoma bitna i jednostavna je funkcija strdel. Ona sluzi za brisanje odreÄ'enog dijela gdje se u argumentu oznacava raspon brisanja.

    Strdel(string[], start, end)
    string[] - string iz kojeg zelimo da brisemo znakovni niz.
    start â€" pozicija znaka u stringu
    end â€" pozicija do koje se brise


    4# funkcija, isto manje poznata funkcija je strins, koja sluzi za ubacivanje jednog manjeg stringa u drugi veci string.

    Strins(string[],const substr[],pos,maxlength=sizeof string)
    string[] â€" string u koji zelite da ubacite ovaj manji
    const substr[] â€" string koji ubacujete
    pos â€" pozicija u stringu odakle zelite da pocnete ubacivanje
    maxlength=sizeof string â€" maksimalna duzina za ubaciti


    5# funkcija, veoma popularna funkcija i po meni jedna od najbitnijih je strlen. Ona vraca duzinu stringa u obliku integera.

    Strlen(const string[])
    const string â€" string od kojeg odredujemo duzinu

    #6 funkcija, veoma popularna, ali i ne manje vazna je funkcija strmid. Ona uzima dio znakova iz stringa/sloga i prebacuje ga u drugi ( male slicnosti sa funkcijom strins ).

    Strmid(dest[],const source[],start,end,maxlength=sizeof dest)
    dest[] â€" string u kojeg zelimo da ubacimo dio drugog
    const source[] â€" string koji ubacujemo u dest[]
    start â€" pozicija prvog znaka
    end â€" pozicija posljednjeg znaka
    maxlength=sizeof dest â€" duzina dest[]


    7# funkcija, veoma korisna ali gotov zaboravljena funkcija je strpack. Ova funkcija kreira “upakovanog” kopiju stringa.

    Strpack(dest[],const source[],maxlength=sizeof dest)
    dest[] â€" string u kojeg zelite da spremite “upakirani” string
    const source[] â€" izvor “upakiranog” stringa
    maxlength=sizeof dest â€" duzina dest[]


    8# funkcija koja je povezana sa proslom je strunpack. Ona kreira “ispakovanu” kopiju stringa.

    Strunpack(dest[], const source[],maxlength=sizeof dest)
    dest[] - string u kojeg zelite da spremite “ispakovani” string
    const source[] â€" izvor “ispakovanog” stringa
    maxlength=sizeof dest â€" duzina dest[]


    #9 funkcija jos manje poznata funkcija je valstr. Iako je nepopularna veoma je korisna. Ona pretvara integer u string.

    Valstr(dest[], value, bool:packed/unpacked)
    dest[] â€" string u koji zelite da ubacite value
    value â€" integer koji ubacujete u dest[]
    bool:packed/unpacked â€" da li zelite da string bude “upakovan” ili “ispakovan” (true/false)


    #16 funkcija, isto slabo popularna funkcija je floatstr. Ona pretvara string u float.

    floatstr(const string[])
    const string[] - string koji zelis da prtvoris


    #11 funkcija, jedna od najpopularnijih je strval. Veoma jednostavna, pretvara string u integer. Obrnuto od valstr.

    Strval(string[])
    string[] â€" string za pretvoriti.

    #12 funkcija, negdje je ima, negdje nema… Ta funkcija je strcat. Ona nadovezuje jedan string na drugi, kao lanac...

    Strcat(dest[], string[],maxlength=sizeof string)
    dest[] â€" string na koji zelite da nadovezete string[]
    string[] â€" string koji nadovezujete na dest[]
    maxlength=sizeof string â€" duzina string[]


    #13 funkcija, svima poznata je format. Ova funkcija formatira string po parametrima koje joj vi ponudite...

    Format(string[], len, formatirani string, parametri)
    string[] â€" string koji zelite da formatirate
    len â€" duzina string[]-a
    formatirani string â€" rezultat formatiranja
    parametri â€" ovde unosite varijable koje zelita se ispisu u string â€" u



    %c   Ubacuje samo jedan znak/slovo.
    %d   Ubacuje neki broj/integer.
    %f   Ubacuje racionalni broj/float.
    %i   Isto kao i %d.
    %s   Ubacuje niz znakova(string/slog).
    %x   Ubacuje broj u heksadecimalnom format.
    %%   Ubacuje znak postotka ‘%’[/li][/list]




    E to bi bilo to sto se tice objasnjavanja, preostaju samo jos primjeri... Nadam se da ste do sada nesto shvatili...

    Primjeri:

    #1
    YCMD:provjeri(playerid, params[], help)
    {
    #pragma unused help
    new ime[MAX_PLAYER_NAME];
    GetPlayerName(playerid, ime, sizeof ime);
    new unos[24];
    if(!sscanf(params, "s[24]", unos))
    {
    if(strcmp(unos, ime, true) == 0)
    {
    SCM(playerid, -1, "Pogodio si ime!");
    }
    else return SCM(playerid, -1, "Nazalost pogrijesio si ime!");
    }
    return 1;
    }

    #2
    YCMD:provjeri(playerid, params[], help)
    {
    #pragma unused help
    new string[128];
    GetPlayerName(playerid, ime, sizeof ime);
    new unos[64];
    format(string, sizeof string, "Pronadji me!");
    if(!sscanf(params, "s[64]", unos))
    {
    if(strfind(unos, string, true) != -1)
    {
    SCM(playerid, -1, "Pronasao si slovo!");// ako unese npr. pro - ispisace ovu poruku...
    }
    else return SCM(playerid, -1, "Nazalost pogrijesio si ime!");
    }
    return 1;
    }

    #3
    new string[16] = "Ostat ce samo A";
    strdel(string, 0, 14); // string je sada "A"


    #4
    strins("Ubacit cemo ", "rijec", 32);
    //string je sada "Ubacit cemo rijec!"


    #5
    new duzina;
    new string[15];
    format(string, sizeof string, “Ovo je string”);
    duzina = strval(string);
    printf(“Duzina stringa je %i”, duzina); // izbacit ce broj 13...


    #6
    new PerPlayer[MAX_PLAYERS][64];
    new string[24] = “Ubacit cemo ovo u string”;
    strmid(PerPlayer[playerid], string, 0, strlen(string), 255);


    #7
    new string[24];
    strpack(string, “Ovo cemo upakovati!”);

    #8
    new string[24];
    new upakovani[24 char]= !”Ispakovacemo ovo!”);
    srunpack(string, pstring);


    #9
    new string[24];
    new vrijednost = 50;
    valstr(string, vrijednost);


    #10
    new string[24] = “15.500604”;
    new floatvrijednost = floatstr(string);


    #11
    new string[24] = “5000058”;
    new integer = strval(string);


    #12
    new string[64];
    strcat(string, “a”); strcat(string, “b”); strcat(string, “c”); strcat(string, “d”);
    print(string); // printat ce “abcd”;


    #13
    Mislim da ovu svi znate, pa nema potrebe za objasnjavanjem...




    Eto to bi bilo to sto se tice ovoga tut-a, ako vam nesto nije jasno ili
    zelite da saznate vise, slobodno se obratite za pomoc u ovoj temi...


    Vecina ovih funkcija je dostupna u standardnom C/C++ programskom
    okruzenju.
    (Moguce su pravopisne i gramaticke greske u ovome tekstu)

    Poslednja Izmena: Jul 05, 2011, 18:55:14 POSLE PODNE od EM|Pacino
    Just one more time.

    lijepo ali malo je koplicirano
    Uskoro novi stunt server iStunt. DoÄ'ite i zabavite se!




       
       




    Dizajniram za $$$
    Popis stvari koje radim:

    Wallpaper √  Signature ×  Logo √  Dizajn stranice (Ne kodiranje) √  Baner √  Avatar √  Animacija √  Intro √

    strcmp - "najkompliciranija", "iako slabo tko zna sta ona zapravo radi" ?  :D
    strfind - "mada se izbjegava iz opravdanih razloga" ?
    kakve trave ti pusis daj mi reci  :D

    mislim da za vecinu ako se procita ime i argumenti se zna sta radi, a ti tu plasis ko da su ne znam sta, joj joj, nije dobro se drogirat  ;)
    aka JOE BULLET :)

    Citat: Omega-300 poslato Jul 05, 2011, 18:34:52 POSLE PODNE
    strcmp - "najkompliciranija", "iako slabo tko zna sta ona zapravo radi" ?  :D
    strfind - "mada se izbjegava iz opravdanih razloga" ?
    kakve trave ti pusis daj mi reci  :D

    mislim da za vecinu ako se procita ime i argumenti se zna sta radi, a ti tu plasis ko da su ne znam sta, joj joj, nije dobro se drogirat  ;)

    Hajde ako si ti neki genijalac objasni nesto iz pawn library-a...
    Mogu se kladiti da pojma nemas...
    Just one more time.

    Super tut :D
    Since 19.6.2011 - P!xel
                                      

    - Skripter
    - Maper
    - Web Developer


    dragan12



    Citat: EM|Pacino poslato Jul 05, 2011, 18:54:42 POSLE PODNE
    Citat: Omega-300 poslato Jul 05, 2011, 18:34:52 POSLE PODNE
    strcmp - "najkompliciranija", "iako slabo tko zna sta ona zapravo radi" ?  :D
    strfind - "mada se izbjegava iz opravdanih razloga" ?
    kakve trave ti pusis daj mi reci  :D

    mislim da za vecinu ako se procita ime i argumenti se zna sta radi, a ti tu plasis ko da su ne znam sta, joj joj, nije dobro se drogirat  ;)

    Hajde ako si ti neki genijalac objasni nesto iz pawn library-a...
    Mogu se kladiti da pojma nemas...
    Ja sam Bullet, Joe Bullet, tako da mi nemoj srat.
    aka JOE BULLET :)

    Prije svega, jako lijep tutorial siguran sam da će koristiti nekima. Svaka čast na trudu. - Iako me puno nasmijalo neka tvoja mišljenja o npr. 'strfind' da se izbjegava ( hehehe )

    Citat: EM|Pacino poslato Jul 05, 2011, 18:09:40 POSLE PODNE
    bool:ignorecase - E ovo je ono sto vecinu zbunjuje, a sama rijec kaze: "ignorecase", ako stavite true vrijedit ce:

    ignorecase - ne kaže sama riječ, jednostavnije to je on/off gumb strcmp komande.

    Citat: EM|Pacino poslato Jul 05, 2011, 18:09:40 POSLE PODNE
    funkcija, jedna od najpopularnijih je strval. Veoma jednostavna, pretvara string u integer. Obrnuto od valstr.

    TakoÄ'er, pretavaranje integer u float je isto jako važno, to radi ova naredba: http://wiki.sa-mp.com/wiki/Floatround

    Iako nije samo za to, ali izmeÄ'u ostalog.

    Citat: EM|Pacino poslato Jul 05, 2011, 18:09:40 POSLE PODNE
    funkcija, svima poznata je format. Ova funkcija formatira string po parametrima koje joj vi ponudite...

    format nije funkcija. Tj. jest jedna vrsta funkcije. ima 'optional'

    Citat: EM|Pacino poslato Jul 05, 2011, 18:09:40 POSLE PODNE
    %i   Isto kao i %d.

    Heh, donekle točno ali nije isto. %i formatira integer u 'pokretu' dok je %d stalni integer

    Citat: EM|Pacino poslato Jul 05, 2011, 18:09:40 POSLE PODNE
    Vecina ovih funkcija je dostupna u standardnom C/C++ programskom okruzenju.

    Vidim da u svakom svom radu koji objaviš počneš nešto sa C/C++ ajde mi sada reci kakve veze to ima sa ovom temom? :S
    - Mislim nemam ništa protiv ali samo zbunjuješ one koji se ne razumiju ni u PAWN, a kamoli u C/C++ ako se toliko voliš hvaliti ili se želiš dokazati sa tim C/C++ onda napravi neki plugin, a ne samo filozofirati da ispadne da se razumiješ.

    Citat: Omega-300 poslato Jul 06, 2011, 12:17:47 POSLE PODNE
    Ja sam Bullet, Joe Bullet, tako da mi nemoj srat.

    Bullet pusti, nemoj se svaÄ'ati. Jednostavno se želi dokazati.

    A Pacino mislim da Bulletu nemaš šta posebno govoriti jer je on u Dev. Timu sa Yless-om, zajedno rade YSI tako da to sve objašnjava.
    Kristijan Stipić

    Citat: [H]265 poslato Jul 06, 2011, 12:20:52 POSLE PODNE
    Prije svega, jako lijep tutorial siguran sam da će koristiti nekima. Svaka čast na trudu. - Iako me puno nasmijalo neka tvoja mišljenja o npr. 'strfind' da se izbjegava ( hehehe )

    Citat: EM|Pacino poslato Jul 05, 2011, 18:09:40 POSLE PODNE
    bool:ignorecase - E ovo je ono sto vecinu zbunjuje, a sama rijec kaze: "ignorecase", ako stavite true vrijedit ce:

    ignorecase - ne kaže sama riječ, jednostavnije to je on/off gumb strcmp komande.

    Citat: EM|Pacino poslato Jul 05, 2011, 18:09:40 POSLE PODNE
    funkcija, jedna od najpopularnijih je strval. Veoma jednostavna, pretvara string u integer. Obrnuto od valstr.

    TakoÄ'er, pretavaranje integer u float je isto jako važno, to radi ova naredba: http://wiki.sa-mp.com/wiki/Floatround

    Iako nije samo za to, ali izmeÄ'u ostalog.

    Citat: EM|Pacino poslato Jul 05, 2011, 18:09:40 POSLE PODNE
    funkcija, svima poznata je format. Ova funkcija formatira string po parametrima koje joj vi ponudite...

    format nije funkcija. Tj. jest jedna vrsta funkcije. ima 'optional'

    Citat: EM|Pacino poslato Jul 05, 2011, 18:09:40 POSLE PODNE
    %i   Isto kao i %d.

    Heh, donekle točno ali nije isto. %i formatira integer u 'pokretu' dok je %d stalni integer

    Citat: EM|Pacino poslato Jul 05, 2011, 18:09:40 POSLE PODNE
    Vecina ovih funkcija je dostupna u standardnom C/C++ programskom okruzenju.

    Vidim da u svakom svom radu koji objaviš počneš nešto sa C/C++ ajde mi sada reci kakve veze to ima sa ovom temom? :S
    - Mislim nemam ništa protiv ali samo zbunjuješ one koji se ne razumiju ni u PAWN, a kamoli u C/C++ ako se toliko voliš hvaliti ili se želiš dokazati sa tim C/C++ onda napravi neki plugin, a ne samo filozofirati da ispadne da se razumiješ.

    Citat: Omega-300 poslato Jul 06, 2011, 12:17:47 POSLE PODNE
    Ja sam Bullet, Joe Bullet, tako da mi nemoj srat.

    Bullet pusti, nemoj se svaÄ'ati. Jednostavno se želi dokazati.

    A Pacino mislim da Bulletu nemaš šta posebno govoriti jer je on u Dev. Timu sa Yless-om, zajedno rade YSI tako da to sve objašnjava.

    Nisam znao da je on... Ali ja to samo uporedjujem samo radi reda (C), jer je poprilicno slican...
    Just one more time.

    Takodje bravo za trud, za neke stvari sam se nasmejao kao [H]265 i Bullet :D


    Posto vidim da bas zelis da se pokazes kao sto rece [H]265 napravi neki dobar plugin...

    Citat: |β3tα|_eXtreme_ poslato Jul 06, 2011, 12:42:57 POSLE PODNE
    Takodje bravo za trud, za neke stvari sam se nasmejao kao [H]265 i Bullet :D


    Posto vidim da bas zelis da se pokazes kao sto rece [H]265 napravi neki dobar plugin...

    Hajde eto, ocekujte neki plugin u toku dana... samo da smislim sta cu...
    Just one more time.

    Nemoj neke gluposti nego neki pošten plugin, mislim da svatko zna napraviti neku glupost u plugin-u. Nego napravi npr. Facebook chat za SA:MP da se mozes preko FB-a spojit nes kao IRC
    Kristijan Stipić

    Citat: [H]265 poslato Jul 06, 2011, 12:56:15 POSLE PODNE
    Nemoj neke [cenzura]osti nego neki pošten plugin, mislim da svatko zna napraviti neku [cenzura]ost u plugin-u. Nego napravi npr. Facebook chat za SA:MP da se mozes preko FB-a spojit nes kao IRC

    Hajd ok, pokusat cu to srediti :D
    btw. Otisli smo offtopic skroz xD
    Poslednja Izmena: Jul 06, 2011, 12:58:25 POSLE PODNE od EM|Pacino
    Just one more time.