Jump to content
  • 0

pomoc Explode v pawn


ForestCZE

Dotaz

Zdravím, existuje v pawn stejná funkce jako explode(); v PHP?

 

Mám dialog (viz příloha) a potřeboval bych dle mezer vyexplodovat do pole:

 

new pole[128] = explode(" ", inputtext);
strval(pole[0]);
strval(pole[1]);
strval(pole[2]);
strval(pole[3]);

Nějak tak, abych s těmi čísly mohl pracovat dál. Jak na to? Díky předem za pomoc.

sa-mp-000.png

Link to comment
Share on other sites

10 odpovědí na tuto otázku

Recommended Posts

  • 1

Na to sa bežne používa "sscanf" plugin.
Našiel som nejaký návod aj na tomto fóre, možno by som ho pozrel na tvojom mieste. :)

 

Link to comment
Share on other sites

  • 3

Vytvoril jsem takovy hodne jednoduchy explode. Umi to jen integery a prepoklada ze na prvni pozici uz je integer.

stock explode(delimiter[],string[],array[],len = sizeof(array))
{
	new dellen = strlen(delimiter);
	array[0] = strval(string);
	for(new i=1,pos;i<len && (pos = strfind(string,delimiter,true,pos)) != -1;i++)
	{
		array[i] = strval(string[pos]);
		pos+=dellen;
	}
	return 1;
}

public OnFilterScriptInit()
{
	new str[] = "1 2 3 4 5";
	new Pole[5];
	explode(" ",str,Pole);
	for(new i;i<sizeof(Pole);i++) printf("%d=%d",i,Pole[i]);
	return 1;
}

 

Edited by ATomas
Link to comment
Share on other sites

  • 2
  • Hlavní moderátor
před 44 minutami, bigw3b. said:

ak sa nemylim strlib ma takuto funkciu - strexplode(output[][], input[], znak)

 

napr v tvojom pripade cca taketo daco

new out[4][4], count;

count = strexplode(out, inputtext, " ");

if(count != 4)

 ....chyba, inputtext neobsahuje 3 medzery, or 4 "casti"

K tomuto bych jen dodal, že se nejedná o nativní knihovnu, takže si ji musíš nejprve stáhnout a dát do složky includes. Odkaz.

Link to comment
Share on other sites

  • 1

ak sa nemylim strlib ma takuto funkciu - strexplode(output[][], input[], znak)

 

napr v tvojom pripade cca taketo daco

new out[4][4], count;

count = strexplode(out, inputtext, " ");

if(count != 4)

 ....chyba, inputtext neobsahuje 3 medzery, or 4 "casti"

Edited by bigw3b.
Link to comment
Share on other sites

  • 0

Zkusil jsem s tím pracovat dál nějak takto:

 

new out[4][4], count;
count = strexplode(out, inputtext, " ");
for(new i = 0; i < count; i++) strval(out[i]);
new total = (out[0]*86400) + (out[1]*3600) + (out[2]*60) + out[3]);

if(total > promenna) Tvuj aktualni cas je mensi nez zadany...

A errrors:

 

error 033: array must be indexed (variable "out")
error 029: invalid expression, assumed zero
warning 215: expression has no effect

Předpokládám, že ta proměnná total musí být také pole. Asi?

Edited by ForestCZE
Link to comment
Share on other sites

  • 0
před 1 hodinou, ForestCZE said:

Zkusil jsem s tím pracovat dál nějak takto:

 


new out[4][4], count;
count = strexplode(out, inputtext, " ");
for(new i = 0; i < count; i++) strval(out[i]);
new total = (out[0]*86400) + (out[1]*3600) + (out[2]*60) + out[3]);

if(total > promenna) Tvuj aktualni cas je mensi nez zadany...

A errrors:

 


error 033: array must be indexed (variable "out")
error 029: invalid expression, assumed zero
warning 215: expression has no effect

Předpokládám, že ta proměnná total musí být také pole. Asi?

ignorujme chybu čo ti to teraz vypisuje..
Máš v cykle strval(out), ale nikde tú hodnotu neukladáš.
Myslím, že tvoj cyklus by sa dal prepísať takto:


new out[4][4], count, total;
count = strexplode(out, inputtext, " ");

for(new i = 0; i < count; i++) {
  total *= 60;
  total += strval(out[i]);
}

if(total > promenna) Tvuj aktualni cas je mensi nez zadany...

 

Edited by Tanga
celý kód
Link to comment
Share on other sites

  • 0
před 4 minutami, Tanga said:

ignorujme chybu čo ti to teraz vypisuje..
Máš v cykle strval(out), ale nikde tú hodnotu neukladáš.
Asi skôr do cyklu total += strval(out);

Asi je to nesmysl tak, jak jsem to napsal. Jde o to, že to out je string a já to celé potřebuji přetypovat na integer :-) A potom jednotlivé hodnoty na indexech 0-3 sečíst.

Edited by ForestCZE
Link to comment
Share on other sites

  • 0
před 14 minutami, bigw3b. said:

new int[4];
for(new i = 0; i < count; i++) int[i] = strval(out[i]);
new total = (int[0]*86400) + (int[1]*3600) + (int[2]*60) + int[3]); 

 

Na konci závorka navíc, ale jinak bez errors. Díky :)

EDIT: Už to šlape, jak má :)

Edited by ForestCZE
Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
×
×
  • Create New...