←  Gotowe funkcje

AMXX.pl: Support AMX Mod X i SourceMod

»

Rozróżnianie tekstu z odstępami

  • +
  • -
diablix's Photo diablix 26.01.2012

Krótki kodzik, wiele osób tego szukało więc zamieszczam :&

stock przygotujTekst(sTekst[], iLen){
for(new i = iLen-0x1 ; i ; i--){
if(sTekst[i] == ' ') sTekst[i] = EOS;

if(sTekst[i-0x1] != ' ') break;
}
}


Jak on dokładnie działa? Otóż przydaje się on gdy chcemy porównać dwa teksty które mogą się różnic ilością "spacji" na końcu tekstu.
Przydatne dla osób które tworzą własne lub modyfikują czyjeś pluginy.

Najprościej to będzie opisać w przykładowym zastosowaniu:


public sprawdzDwaTeksty(id){
new sTekst[0x2][0x10];

ArrayGetString(g_sNazwa, 0x1, sTekst[0x0], sizeof sTekst[]-0x1); // "Tekst"
ArrayGetString(g_sNazwa, 0x2, sTekst[0x1], sizeof sTekst[]-0x1); // "Tekst "

przygotujTekst(sTekst[0x0], sizeof sTekst[] - 0x1);
przygotujTekst(sTekst[0x1], sizeof sTekst[] - 0x1);

if(equal(sTekst[0x0], sTekst[0x1]))
log_amx("Dwa teksty zostaly DOKLADNIE porownane, ich tresc jest identyczna.");
}


U mnie się to naprzykład przydało w pluginie w którym gracz tworzył drużyny, aby nie mógł za nic ustawić takiej samej nazwy drużyny jak inna :)
Quote

  • +
  • -
DarkGL's Photo DarkGL 26.01.2012

po kij używać szesnastkowego tutaj :lol: ? ( chyba że lubisz utrudniać życie tym którzy nie znają go biegle )

w amxx jest już funkcja od tego
http://www.amxmodx.o...?go=func&id=570
Quote

  • +
  • -
Fili:P's Photo Fili:P 26.01.2012

Hmm, a czy czasem 0x1 to nie 1 i 0x2 to nie 2 ?
Quote

  • +
  • -
G[o]Q's Photo G[o]Q 26.01.2012

tak diablix chciał pokazać ze zna inne systemy xD

Diablix a co się stanie jak w tablicy bd mieć np "jakis tam sobie tekst" ?? funkcja usunie spacje czy efektem będzie zapamiętanie tylko "jakis" ??
Quote

  • +
  • -
diablix's Photo diablix 27.01.2012

@G[o]Q

Zawsze używam szesnastkowego, kwestia przyzwyczajenia :P

No to zostanie tylko pierwsze zdanie :) Ewentualnie mogę zrobić wersje która sprawdza tylko na końcu spacje jeżeli ktoś tego chce:)


@Fili:P

Właśnie tak.

EDIT

Jednak dobrze że GoQ mnie upomniał, nie taki miał być cel tej funkcji :D Poprawione ;)
Quote

  • +
  • -
R3X's Photo R3X 15.02.2012

Darku ma rację, trim i po sprawie. Czy poniższy kod nie jest dużo bardziej czytelny?

new szTextOne[] = "   text   ";
new szTextTwo[] = "text";

trim(szTextOne);
trim(szTextTwo);

if(equal(szTextOne, szTextTwo)){

}
Quote

  • +
  • -
diablix's Photo diablix 16.02.2012

R3X ale trim usunie wszystkie spacje a moim problemem było to że chciałem tylko te na końcu... Ludzie wybierali nazwę "grupy" i chciałem żeby wykryło taki tekst:

"Grupa numer jeden"
"Grupa numer jeden "

I wtedy equal już tak dobrze się nie sprawdzał :P

Ale wiem że mogłem to zrobić na zasadzie:

if(equal(sTekst1, sTekst2, strlen(sTekst1)-0x1))


No cóż, alę może komuś się przyda..
Quote

  • +
  • -
R3X's Photo R3X 16.02.2012

trim usuwa spacje z końca i z początku, nie wszystkie :)
Quote

  • +
  • -
diablix's Photo diablix 16.02.2012

:facepalm:

To może komuś się chociaż przyda jego stockowa wersja :P
sebul (16.02.2012 22:55):
Ale wtopa xD
Quote

  • +
  • -
DarkGL's Photo DarkGL 17.02.2012

To może komuś się chociaż przyda jego stockowa wersja

tylko że twój stock nie usunie spacji z początku :D
Quote