Jump to content
  • 0
ForestCZE

pomoc Explode v pawn

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

Sdílet tento příspěvek


Link to post
Share on other sites

10 odpovědí na tuto otázku

Recommended Posts

  • 2
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.

Sdílet tento příspěvek


Link to post
Share on other sites
  • 2

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

Sdílet tento příspěvek


Link to post
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.

Sdílet tento příspěvek


Link to post
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

Sdílet tento příspěvek


Link to post
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

Sdílet tento příspěvek


Link to post
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

Sdílet tento příspěvek


Link to post
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

Sdílet tento příspěvek


Link to post
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


×