Jump to content
  • 0

String LOOP


MichaelMik9

Dotaz

Ahojte a zdravím všechny,

chtěl bych vás zde poprosit o malou pomoc. Přes příkaz /setwarp na SAMP serveru si vytvořím warp (údaje o pozici a příkaz se ukládá přes MYSQL do databáze) a potřebuju přes /warps tyto warpy vypsat.

Zezačátku se mi povedlo warpy vypsat jednotlivě, tzn. jeden warp - jeden řádek, tohle ale nechci. Chtěl bych warpy nacyklovat ->vložit do pole a pak je vypsat jako jeden text.

Můj kód zatím vypadá takto samozřejmě s errorem a netuším jak dál:

mysql_query(Database, "SELECT * FROM `samp_warps` ORDER BY `warp_command` ASC");
new rowCount; //vytvoření proměnné pro uložení celkového počtu warpů
cache_get_row_count(rowCount); //vytáhnutí počtu warpů a zapsaní do proměnné rowCount

new warps[MAX_STRING] = {}; //vytvoření prázdného pole (MAX_STRING je definován)

for(new i = 0; i <= rowCount; i++ ) //začátek cyklu pro vytáhnutí jednotlivého warpu z databáze
{
	new mysqlSelectWarp[65];
	format(mysqlSelectWarp, sizeof(mysqlSelectWarp), "SELECT * FROM `samp_warps` WHERE id='%i'", i++);
	mysql_query(Database, mysqlSelectWarp); //dotaz pro jeden WARP

  	
	new warpName[20];
	cache_get_value_name(i, "warp_command", warpName, sizeof(warpName)); //vytáhnutí sloupce s příkazem (jméno warpu) 
	  		    
	warps[i] = warpName; //tuto původně jsem myslel, že by fungovalo jako vložení stringu do proměnné a zde je error: error 006: must be assigned to an array
}

Je tedy možné nějak toto zprovoznit? 

Děkuji předem :)

Link to comment
Share on other sites

4 odpovědí na tuto otázku

Recommended Posts

  • 4
  • Majitel

Celá sestava toho kódu je úplně špatně.. 

Nejdřív voláš query na select všeho v samp_warps. Jinými slovy - načteš celý obsah tabulky. Z toho celého obsahu si odneseš jen počet položek a uděláš z toho cyklus (který jede od nuly do <= rowCount - o jednu víc). Uvnitř ZNOVU postupně voláš query na všechny položky tabulky i když už ty data jednou máš. Ten overhead by při větším množství položek byl neskutecnej. 

Využij výsledků té první query, ve které už máš kompletně všechna potřebná data a cykluj zkrze ta, je to 10x rychlejší na výkon i o mnohonásobně jednodušší na sepsání 

Error máš proto, že se snažíš vložit array do druhé array na jedno místo. String je ve skutečnosti array znaků, takže spojení stringu funguje jako nalepení dvou array na sebe, chceš mít array obsahující stringy, musíš jej deklarovat jako array v array. 

Link to comment
Share on other sites

  • 2
  • Globální moderátor

Hmmm, promyslel bych si tu logiku ještě pořádně, pokud těch warpů v DB bude hodně, tak je dost zbytečné volat dotaz do databáze (velká réžie) na konkrétní řádek. Zkus využít záznamy vytáhnuté z: 

mysql_query(Database, "SELECT * FROM `samp_warps` ORDER BY `warp_command` ASC");

 

Každopádně k tvému problému: stringy nemůžeš prostě takto přiřadit, buď je pospojovat pomocí strcat a nebo format. Tzn

format(warps, sizeof(warps), "%s /%s", warps, warpName);

 

PS: přesunul jsem ti topic z Domů > Herní Oblast > Poradna > Problémy s hrou do Domů > Programování > Poradna > Herní (SA:MP, CS apod.) 

Link to comment
Share on other sites

  • 0

Ahoj toho jsem si nevšiml, že vlastně query mám i v loopu :)

 

Citace

Error máš proto, že se snažíš vložit array do druhé array na jedno místo. String je ve skutečnosti array znaků, takže spojení stringu funguje jako nalepení dvou array na sebe, chceš mít array obsahující stringy, musíš jej deklarovat jako array v array

-> to tedy sepíšu jak? Vím jak myslíš ale nevím jak to napsat :)

 
Edited by MichaelMik9
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...